Cross Reference: /yui3/src/substitute/tests/substitute.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
58ec2c19476c8981b1c3280d3bbcce8a11acc578Luke Smith<!doctype html>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<html>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<head>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<title>YUI substitute Tests</title>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore</head>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
9982ae2753aea312f8260f66903f5cfb1d202d22Adam Moore<body class="yui3-skin-sam">
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<h1>substitute Tests</h1>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<script type="text/javascript" src="/build/yui/yui.js"></script>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore<script type="text/javascript">
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore(function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore YUI({
58ec2c19476c8981b1c3280d3bbcce8a11acc578Luke Smith filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min',
58ec2c19476c8981b1c3280d3bbcce8a11acc578Luke Smith allowRollup: false,
58ec2c19476c8981b1c3280d3bbcce8a11acc578Luke Smith useBrowserConsole: false
58ec2c19476c8981b1c3280d3bbcce8a11acc578Luke Smith }).use("dump", "test", "console", "event-custom", function(Y) {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
9982ae2753aea312f8260f66903f5cfb1d202d22Adam Moore var button = Y.one('#btnRun'),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert = Y.Assert,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ObjectAssert = Y.ObjectAssert;
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // Set up the page
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore button.set("disabled", false);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.on("click", function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.Test.Runner.run();
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore }, button);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
9982ae2753aea312f8260f66903f5cfb1d202d22Adam Moore var myConsole = new Y.Console().render();
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var testSubstitute= new Y.Test.Case({
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore name: "Substitute tests",
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore test_substitute: function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore var param = {domain: 'valvion.com',
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore media: 'http://media.{domain}/', /* nested */
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore contextdomain: { context1: 'context{domain}', context2: 'yahoo.com' }, /* the value is an object, we will use a custom function to extract the correct data */
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore contextmedia: 'http://contextmedia.{contextdomain context1}/'};
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var url;
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // standard replace, nested
838d626f7e69c325fea41507371d80369a69026cAdam Moore url = Y.substitute("{media}logo.gif", param, null, true);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(url, "http://media.valvion.com/logo.gif");
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // If the replacement value is an object, use the meta info as a key to extract the
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // correct data. Otherwise just return the value.
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore function multipleChoice(key, val, meta) {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore return (Y.Lang.isObject(val)) ? val[meta] : val;
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore }
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore // "random data" is not used since the value for the contextmedia key is a string.
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore // contextdomain uses "context1" as a key to expand the string correctly
838d626f7e69c325fea41507371d80369a69026cAdam Moore url = Y.substitute("{contextmedia random data}logo.gif", param, multipleChoice, true);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(url, "http://contextmedia.contextvalvion.com/logo.gif");
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var obj = {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_1: 1.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_2: 1.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_3: {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_1: 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_2: 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_3: {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_1: 3.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_2: 3.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_3: 3.3,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level3_4: 3.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore },
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_4: 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore },
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level1_4: 1.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore };
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro Y.substitute("{testobj 0}", { testobj: obj }, null, true),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{level1_1 => 1.1, level1_2 => 1.2, level1_3 => {...}, level1_4 => 1.4}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed one level object dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro Y.substitute("{testobj 1}", { testobj: obj }, null, true),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{level1_1 => 1.1, level1_2 => 1.2, level1_3 => {level2_1 => 2.1, level2_2 => 2.2, level2_3 => {...}, level2_4 => 2.4}, level1_4 => 1.4}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed two level object dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.substitute(
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro "{testobj 10}", { testobj: obj }, null, true),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "{level1_1 => 1.1, level1_2 => 1.2, level1_3 => {level2_1 => 2.1, level2_2 => 2.2, level2_3 => {level3_1 => 3.1, level3_2 => 3.2, level3_3 => 3.3, level3_4 => 3.4}, level2_4 => 2.4}, level1_4 => 1.4}",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed deep object dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var arr = [
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 1.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 1.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore [
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore [
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.3,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ],
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ],
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 1.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ];
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore Y.substitute("{testarr 1}", { testarr: arr }, null, true),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "[1.1, 1.2, [2.1, 2.2, {...}, 2.4], 1.4]",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed two level array dump"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var mix = [
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 1.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore new Date(),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_1: 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_2: 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_3: [
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.3,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 3.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ],
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore level2_4: 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore },
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore 1.4,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore function(){}
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ];
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
838d626f7e69c325fea41507371d80369a69026cAdam Moore var result = Y.substitute("{testmix 1}", { testmix: mix }, null, true);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.isTrue(
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore (result.indexOf("GMT" > -1)) ? true : false,
583b6463b1b1af52ed4ff0bfa66a6fbf8658c5b3Adam Moore "failed two level mixed object with a date (date should have produced an output with GMT in it)"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore var tostr = {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_1: 1.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_2: 1.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_3: {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_1: 2.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_2: 2.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_3: {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_1: 3.1,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_2: 3.2,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_3: 3.3,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom3_4: 3.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore },
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom2_4: 2.4
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore },
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore custom1_4: 1.4,
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore toString: function() {
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore return "custom toString executed";
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore }
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore };
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Assert.areEqual(
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore Y.substitute("{customtostr 1}", { customtostr: tostr }, null, true),
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "custom toString executed",
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore "failed: custom toString should have been used"
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore // Assert.areEqual(
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore // Y.substitute("{customtostr dump 1}", { customtostr: tostr }, null, true),
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore // "{custom1_1 => 1.1, custom1_2 => 1.2, custom1_3 => {custom2_1 => 2.1, custom2_2 => 2.2, custom2_3 => {...}, custom2_4 => 2.4}, custom1_4 => 1.4, toString => f(){...}}",
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore // "failed: custom toString should NOT have been used because the dump keyword should override it"
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore // );
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore ////////////////////////////////////////////////////////////////////////////////
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
838d626f7e69c325fea41507371d80369a69026cAdam Moore var template = 'My {prefix} name is {name}. {signature}';
838d626f7e69c325fea41507371d80369a69026cAdam Moore var obj = {
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore prefix:'last',
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore name: 'Zappa',
838d626f7e69c325fea41507371d80369a69026cAdam Moore signature: '{I am a replacement string }{}'
838d626f7e69c325fea41507371d80369a69026cAdam Moore };
637be785ab98741335d5cd6634fddc5f6ecdb41bAdam Moore
838d626f7e69c325fea41507371d80369a69026cAdam Moore // testing {} in the replacement text
838d626f7e69c325fea41507371d80369a69026cAdam Moore Assert.areEqual("My last name is Zappa. {I am a replacement string }{}", Y.substitute(template, obj));
637be785ab98741335d5cd6634fddc5f6ecdb41bAdam Moore
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro Assert.areEqual(
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro '-{test}-',
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro Y.substitute('-{LBRACE}test{RBRACE}-', {test:'test'}, null, true),
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro 'replacement of literals {LBRACE} and/or {RBRACE} failed'
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro );
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro Assert.areEqual(
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro 'done',
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro Y.substitute('{{{three}}}', {
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro three:'two',
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro two: 'one',
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro one: 'done'
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro },null,true),
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro 'recurse failed'
453cd2583d95cd4eef2ec23a7b564ed63d08e0b1Daniel Barreiro );
47f7380215b8e35dd4da7b1dde41e85467f13777Luke Smith }
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore });
a02dc3badfd643b0ea8a5b6b610c53bb0a363ab0Adam Moore
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore
9a76bc095233b0cb0be3a913f5913bfc72c38b6cSatyen Desai Y.Test.Runner.setName("Substitute");
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.Test.Runner.add(testSubstitute);
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore Y.Test.Runner.run();
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore });
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore})();
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore</script>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore</body>
bd4e7bf54bb629b039ba9e22ba57cf09cddce482Adam Moore</html>