Skip to content

Commit 738cc1e

Browse files
author
Chuck Dumont
authored
Merge pull request #65 from chuckdumont/work2
Unit tests for dojo/has plugin name resolution
2 parents 6417a9f + e38ec61 commit 738cc1e

File tree

4 files changed

+249
-2
lines changed

4 files changed

+249
-2
lines changed

lib/DojoAMDRequireItemDependency.js

+4
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,7 @@ function resolveTernaryHasExpression(request, deps, props) {
128128
}
129129
return result;
130130
}
131+
132+
// For unit testing
133+
DojoAMDRequireItemDependency.resolveTernaryHasExpression = resolveTernaryHasExpression;
134+

test/TestCases/has/fooFalse/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
define(["dojo/has", "dojo/has!foo?./a:./b"], function(has, m1) {
1+
define(["dojo/has", "dojo/has!foo?./a:./b", "dojo/has!foo?undef"], function(has, m1, undef) {
22

33
it("should load false module", function(done) {
44
has("webpack").should.be.true;
55
has("foo").should.be.false;
66
m1.should.be.eql("b");
7+
(typeof undef === 'undefined').should.be.true;
78
has.add("foo", true, true);
89
require(["dojo/has!foo?./c:./d"], function(m2) {
910
// module should have been set at build time and not changed just because foo changed

test/TestCases/has/fooTrue/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
define(["dojo/has", "dojo/has!foo?./a:./b"], function(has, m1) {
1+
define(["dojo/has", "dojo/has!foo?./a:./b", "dojo/has!foo?:undef"], function(has, m1, undef) {
22
it("should load true module", function(done) {
33
has("webpack").should.be.true;
44
m1.should.be.eql("a");
5+
(typeof undef === 'undefined').should.be.true;
56
has.add("foo", false, true);
67
require(["dojo/has!foo?./c:./d"], function(m2) {
78
// module should have been set at build time and not changed just because foo changed
+241
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
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

Comments
 (0)