1
+ var DojoAMDRequireItemDependency = require ( "../lib/DojoAMDRequireItemDependency" ) ;
2
+ require ( "should" ) ;
3
+ var resolve = DojoAMDRequireItemDependency . resolveTernaryHasExpression ;
4
+ var features = { } ;
5
+ var props = {
6
+ require : {
7
+ has : function ( feature ) {
8
+ return features [ feature ] ;
9
+ }
10
+ } ,
11
+ options : { }
12
+ } ;
13
+
14
+ describe ( "resolveTernaryHasExpression" , function ( ) {
15
+ beforeEach ( function ( ) {
16
+ features = { } ;
17
+ props . options = { } ;
18
+ } ) ;
19
+
20
+ it ( "Should return non-feature expression unchanged" , function ( ) {
21
+ var deps = [ ] ;
22
+ var result = resolve ( null , deps , props ) ;
23
+ ( result === null ) . should . be . true ;
24
+ deps . length . should . be . eql ( 0 ) ;
25
+
26
+ result = resolve ( "" , deps , props ) ;
27
+ result . should . be . eql ( "" ) ;
28
+ deps . length . should . be . eql ( 0 ) ;
29
+
30
+ result = resolve ( "foo" , [ ] , props ) ;
31
+ result . should . be . eql ( "foo" ) ;
32
+ deps . length . should . be . eql ( 0 ) ;
33
+ } ) ;
34
+
35
+ it ( "Should resolve single expression correctly" , function ( ) {
36
+ var deps = [ ] ;
37
+ var expression = "has!feature?foo:bar" ;
38
+ var result = resolve ( expression , deps , props ) ;
39
+ result . should . be . eql ( "feature?%%0:%%1" ) ;
40
+ deps . length . should . be . eql ( 2 ) ;
41
+ deps [ 0 ] . should . be . eql ( "foo" ) ;
42
+ deps [ 1 ] . should . be . eql ( "bar" ) ;
43
+
44
+ props . options . coerceUndefinedToFalse = true ;
45
+ var result = resolve ( expression , deps , props ) ;
46
+ result . should . be . eql ( "bar" ) ;
47
+ deps . length . should . be . eql ( 0 ) ;
48
+
49
+ features . feature = true ;
50
+ delete props . options . coerceUndefinedToFalse ;
51
+ var result = resolve ( expression , deps , props ) ;
52
+ result . should . be . eql ( "foo" ) ;
53
+ deps . length . should . be . eql ( 0 ) ;
54
+
55
+ features . feature = false ;
56
+ var result = resolve ( expression , deps , props ) ;
57
+ result . should . be . eql ( "bar" ) ;
58
+ deps . length . should . be . eql ( 0 ) ;
59
+
60
+ // try with unspecified modules name
61
+ expression = "has!feature?foo" ;
62
+ features . feature = true ;
63
+ var result = resolve ( expression , deps , props ) ;
64
+ result . should . be . eql ( "foo" ) ;
65
+ deps . length . should . be . eql ( 0 ) ;
66
+
67
+ features . feature = false ;
68
+ var result = resolve ( expression , deps , props ) ;
69
+ result . should . be . eql ( "" ) ;
70
+ deps . length . should . be . eql ( 0 ) ;
71
+
72
+ delete features . feature ;
73
+ var result = resolve ( expression , deps , props ) ;
74
+ result . should . be . eql ( "feature?%%0" ) ;
75
+ deps . length . should . be . eql ( 1 ) ;
76
+ deps [ 0 ] . should . be . eql ( "foo" ) ;
77
+
78
+ expression = "has!feature?:bar" ;
79
+ features . feature = true ;
80
+ var result = resolve ( expression , deps , props ) ;
81
+ result . should . be . eql ( "" ) ;
82
+ deps . length . should . be . eql ( 0 ) ;
83
+
84
+ features . feature = false ;
85
+ var result = resolve ( expression , deps , props ) ;
86
+ result . should . be . eql ( "bar" ) ;
87
+ deps . length . should . be . eql ( 0 ) ;
88
+
89
+ delete features . feature ;
90
+ var result = resolve ( expression , deps , props ) ;
91
+ result . should . be . eql ( "feature?:%%0" ) ;
92
+ deps . length . should . be . eql ( 1 ) ;
93
+ deps [ 0 ] . should . be . eql ( "bar" ) ;
94
+
95
+
96
+ } ) ;
97
+
98
+ it ( "Should resolve complex expression correctly" , function ( ) {
99
+ var deps = [ ] ;
100
+ var expression = "has!f1?f2?f1f2:f1^f2:f2?^f1f2:^f1^f2" ;
101
+ var result = resolve ( expression , deps , props ) ;
102
+ result . should . be . eql ( "f1?f2?%%0:%%1:f2?%%2:%%3" ) ;
103
+ deps . length . should . be . eql ( 4 ) ;
104
+ deps [ 0 ] . should . be . eql ( "f1f2" ) ;
105
+ deps [ 1 ] . should . be . eql ( "f1^f2" ) ;
106
+ deps [ 2 ] . should . be . eql ( "^f1f2" ) ;
107
+ deps [ 3 ] . should . be . eql ( "^f1^f2" ) ;
108
+
109
+ features = { f1 :true } ;
110
+ result = resolve ( expression , deps , props ) ;
111
+ result . should . be . eql ( "f2?%%0:%%1" ) ;
112
+ deps . length . should . be . eql ( 2 ) ;
113
+ deps [ 0 ] . should . be . eql ( "f1f2" ) ;
114
+ deps [ 1 ] . should . be . eql ( "f1^f2" ) ;
115
+
116
+ features = { f1 :false } ;
117
+ result = resolve ( expression , deps , props ) ;
118
+ result . should . be . eql ( "f2?%%0:%%1" ) ;
119
+ deps . length . should . be . eql ( 2 ) ;
120
+ deps [ 0 ] . should . be . eql ( "^f1f2" ) ;
121
+ deps [ 1 ] . should . be . eql ( "^f1^f2" ) ;
122
+
123
+ features = { f2 :true } ;
124
+ result = resolve ( expression , deps , props ) ;
125
+ result . should . be . eql ( "f1?%%0:%%1" ) ;
126
+ deps . length . should . be . eql ( 2 ) ;
127
+ deps [ 0 ] . should . be . eql ( "f1f2" ) ;
128
+ deps [ 1 ] . should . be . eql ( "^f1f2" ) ;
129
+
130
+ features = { f2 :false } ;
131
+ result = resolve ( expression , deps , props ) ;
132
+ result . should . be . eql ( "f1?%%0:%%1" ) ;
133
+ deps . length . should . be . eql ( 2 ) ;
134
+ deps [ 0 ] . should . be . eql ( "f1^f2" ) ;
135
+ deps [ 1 ] . should . be . eql ( "^f1^f2" ) ;
136
+
137
+ features = { f1 :false , f2 :false } ;
138
+ result = resolve ( expression , deps , props ) ;
139
+ result . should . be . eql ( "^f1^f2" ) ;
140
+ deps . length . should . be . eql ( 0 ) ;
141
+
142
+ features = { f1 :true , f2 :true } ;
143
+ result = resolve ( expression , deps , props ) ;
144
+ result . should . be . eql ( "f1f2" ) ;
145
+ deps . length . should . be . eql ( 0 ) ;
146
+
147
+ features = { f1 :true , f2 :false } ;
148
+ result = resolve ( expression , deps , props ) ;
149
+ result . should . be . eql ( "f1^f2" ) ;
150
+ deps . length . should . be . eql ( 0 ) ;
151
+
152
+ features = { f1 :false , f2 :true } ;
153
+ result = resolve ( expression , deps , props ) ;
154
+ result . should . be . eql ( "^f1f2" ) ;
155
+ deps . length . should . be . eql ( 0 ) ;
156
+
157
+ // test with empty module expressions
158
+ // f1&&f2 || ^f1&&^f2
159
+ features = { } ;
160
+ expression = "has!f1?f2?f1f2::f2?:^f1^f2" ;
161
+ result = resolve ( expression , deps , props ) ;
162
+ result . should . be . eql ( "f1?f2?%%0:f2?:%%1" ) ;
163
+ deps . length . should . be . eql ( 2 ) ;
164
+ deps [ 0 ] . should . be . eql ( "f1f2" ) ;
165
+ deps [ 1 ] . should . be . eql ( "^f1^f2" ) ;
166
+
167
+ features = { f1 :true } ;
168
+ result = resolve ( expression , deps , props ) ;
169
+ result . should . be . eql ( "f2?%%0" ) ;
170
+ deps . length . should . be . eql ( 1 ) ;
171
+ deps [ 0 ] . should . be . eql ( "f1f2" ) ;
172
+
173
+ features = { f1 :false } ;
174
+ result = resolve ( expression , deps , props ) ;
175
+ result . should . be . eql ( "f2?:%%0" ) ;
176
+ deps . length . should . be . eql ( 1 ) ;
177
+ deps [ 0 ] . should . be . eql ( "^f1^f2" ) ;
178
+
179
+ features = { f1 : true , f2 : true } ;
180
+ var result = resolve ( expression , deps , props ) ;
181
+ result . should . be . eql ( "f1f2" ) ;
182
+ deps . length . should . be . eql ( 0 ) ;
183
+
184
+ features = { f1 : false , f2 : false } ;
185
+ result = resolve ( expression , deps , props ) ;
186
+ result . should . be . eql ( "^f1^f2" ) ;
187
+ deps . length . should . be . eql ( 0 ) ;
188
+
189
+ features = { f1 : true , f2 : false } ;
190
+ result = resolve ( expression , deps , props ) ;
191
+ result . should . be . eql ( "" ) ;
192
+ deps . length . should . be . eql ( 0 ) ;
193
+
194
+ features = { f1 : false , f2 : true } ;
195
+ result = resolve ( expression , deps , props ) ;
196
+ result . should . be . eql ( "" ) ;
197
+ deps . length . should . be . eql ( 0 ) ;
198
+
199
+ // f1&&^f2 || ^f1&&f2
200
+ features = { } ;
201
+ expression = "has!f1?f2?:f1^f2:f2?^f1f2" ;
202
+ result = resolve ( expression , deps , props ) ;
203
+ result . should . be . eql ( "f1?f2?:%%0:f2?%%1" ) ;
204
+ deps . length . should . be . eql ( 2 ) ;
205
+ deps [ 0 ] . should . be . eql ( "f1^f2" ) ;
206
+ deps [ 1 ] . should . be . eql ( "^f1f2" ) ;
207
+
208
+ features = { f1 :true } ;
209
+ var result = resolve ( expression , deps , props ) ;
210
+ result . should . be . eql ( "f2?:%%0" ) ;
211
+ deps . length . should . be . eql ( 1 ) ;
212
+ deps [ 0 ] . should . be . eql ( "f1^f2" ) ;
213
+
214
+ features = { f1 :false } ;
215
+ var result = resolve ( expression , deps , props ) ;
216
+ result . should . be . eql ( "f2?%%0" ) ;
217
+ deps . length . should . be . eql ( 1 ) ;
218
+ deps [ 0 ] . should . be . eql ( "^f1f2" ) ;
219
+
220
+ features = { f1 : true , f2 : true } ;
221
+ var result = resolve ( expression , deps , props ) ;
222
+ result . should . be . eql ( "" ) ;
223
+ deps . length . should . be . eql ( 0 ) ;
224
+
225
+ features = { f1 : false , f2 : false } ;
226
+ var result = resolve ( expression , deps , props ) ;
227
+ result . should . be . eql ( "" ) ;
228
+ deps . length . should . be . eql ( 0 ) ;
229
+
230
+ features = { f1 : true , f2 : false } ;
231
+ var result = resolve ( expression , deps , props ) ;
232
+ result . should . be . eql ( "f1^f2" ) ;
233
+ deps . length . should . be . eql ( 0 ) ;
234
+
235
+ features = { f1 : false , f2 : true } ;
236
+ var result = resolve ( expression , deps , props ) ;
237
+ result . should . be . eql ( "^f1f2" ) ;
238
+ deps . length . should . be . eql ( 0 ) ;
239
+
240
+ } ) ;
241
+ } ) ;
0 commit comments