1package stdlib 2 3import ( 4 "fmt" 5 "testing" 6 7 "github.com/zclconf/go-cty/cty" 8) 9 10func TestNot(t *testing.T) { 11 tests := []struct { 12 Input cty.Value 13 Want cty.Value 14 }{ 15 { 16 cty.True, 17 cty.False, 18 }, 19 { 20 cty.False, 21 cty.True, 22 }, 23 { 24 cty.UnknownVal(cty.Bool), 25 cty.UnknownVal(cty.Bool), 26 }, 27 { 28 cty.DynamicVal, 29 cty.UnknownVal(cty.Bool), 30 }, 31 { 32 cty.True.Mark(1), 33 cty.False.Mark(1), 34 }, 35 } 36 37 for _, test := range tests { 38 t.Run(fmt.Sprintf("Not(%#v)", test.Input), func(t *testing.T) { 39 got, err := Not(test.Input) 40 41 if err != nil { 42 t.Fatalf("unexpected error: %s", err) 43 } 44 45 if !got.RawEquals(test.Want) { 46 t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want) 47 } 48 }) 49 } 50} 51 52func TestAnd(t *testing.T) { 53 tests := []struct { 54 A cty.Value 55 B cty.Value 56 Want cty.Value 57 }{ 58 { 59 cty.False, 60 cty.False, 61 cty.False, 62 }, 63 { 64 cty.False, 65 cty.True, 66 cty.False, 67 }, 68 { 69 cty.True, 70 cty.False, 71 cty.False, 72 }, 73 { 74 cty.True, 75 cty.True, 76 cty.True, 77 }, 78 { 79 cty.True, 80 cty.UnknownVal(cty.Bool), 81 cty.UnknownVal(cty.Bool), 82 }, 83 { 84 cty.UnknownVal(cty.Bool), 85 cty.UnknownVal(cty.Bool), 86 cty.UnknownVal(cty.Bool), 87 }, 88 { 89 cty.True, 90 cty.DynamicVal, 91 cty.UnknownVal(cty.Bool), 92 }, 93 { 94 cty.DynamicVal, 95 cty.DynamicVal, 96 cty.UnknownVal(cty.Bool), 97 }, 98 } 99 100 for _, test := range tests { 101 t.Run(fmt.Sprintf("And(%#v,%#v)", test.A, test.B), func(t *testing.T) { 102 got, err := And(test.A, test.B) 103 104 if err != nil { 105 t.Fatalf("unexpected error: %s", err) 106 } 107 108 if !got.RawEquals(test.Want) { 109 t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want) 110 } 111 }) 112 } 113} 114 115func TestOr(t *testing.T) { 116 tests := []struct { 117 A cty.Value 118 B cty.Value 119 Want cty.Value 120 }{ 121 { 122 cty.False, 123 cty.False, 124 cty.False, 125 }, 126 { 127 cty.False, 128 cty.True, 129 cty.True, 130 }, 131 { 132 cty.True, 133 cty.False, 134 cty.True, 135 }, 136 { 137 cty.True, 138 cty.True, 139 cty.True, 140 }, 141 { 142 cty.True, 143 cty.UnknownVal(cty.Bool), 144 cty.UnknownVal(cty.Bool), 145 }, 146 { 147 cty.UnknownVal(cty.Bool), 148 cty.UnknownVal(cty.Bool), 149 cty.UnknownVal(cty.Bool), 150 }, 151 { 152 cty.True, 153 cty.DynamicVal, 154 cty.UnknownVal(cty.Bool), 155 }, 156 { 157 cty.DynamicVal, 158 cty.DynamicVal, 159 cty.UnknownVal(cty.Bool), 160 }, 161 } 162 163 for _, test := range tests { 164 t.Run(fmt.Sprintf("Or(%#v,%#v)", test.A, test.B), func(t *testing.T) { 165 got, err := Or(test.A, test.B) 166 167 if err != nil { 168 t.Fatalf("unexpected error: %s", err) 169 } 170 171 if !got.RawEquals(test.Want) { 172 t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want) 173 } 174 }) 175 } 176} 177