Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
if(!dojo._hasResource["dojox.uuid.tests.uuid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2
dojo._hasResource["dojox.uuid.tests.uuid"] = true;
3
dojo.provide("dojox.uuid.tests.uuid");
4
dojo.require("dojox.uuid");
5
dojo.require("dojox.uuid.Uuid");
6
dojo.require("dojox.uuid.generateRandomUuid");
7
dojo.require("dojox.uuid.generateTimeBasedUuid");
8
 
9
dojox.uuid.tests.uuid.checkValidityOfUuidString = function(/*String*/uuidString){
10
	// summary:
11
	//		A helper function that's used by the registered test functions
12
	var NIL_UUID = "00000000-0000-0000-0000-000000000000";
13
	if (uuidString == NIL_UUID) {
14
		// We'll consider the Nil UUID to be valid, so now
15
		// we can just return, with not further checks.
16
		return;
17
	}
18
 
19
	doh.assertTrue(uuidString.length == 36); // UUIDs have 36 characters
20
 
21
	var validCharacters = "0123456789abcedfABCDEF-";
22
	var character;
23
	var position;
24
	for(var i = 0; i < 36; ++i){
25
		character = uuidString.charAt(i);
26
		position = validCharacters.indexOf(character);
27
		doh.assertTrue(position != -1); // UUIDs have only valid characters
28
	}
29
 
30
	var arrayOfParts = uuidString.split("-");
31
	doh.assertTrue(arrayOfParts.length == 5); // UUIDs have 5 sections separated by 4 hyphens
32
	doh.assertTrue(arrayOfParts[0].length == 8); // Section 0 has 8 characters
33
	doh.assertTrue(arrayOfParts[1].length == 4); // Section 1 has 4 characters
34
	doh.assertTrue(arrayOfParts[2].length == 4); // Section 2 has 4 characters
35
	doh.assertTrue(arrayOfParts[3].length == 4); // Section 3 has 4 characters
36
	doh.assertTrue(arrayOfParts[4].length == 12); // Section 4 has 8 characters
37
 
38
	// check to see that the "UUID variant code" starts with the binary bits '10'
39
	var section3 = arrayOfParts[3];
40
	var HEX_RADIX = 16;
41
	var hex3 = parseInt(section3, HEX_RADIX);
42
	var binaryString = hex3.toString(2);
43
	// alert("section3 = " + section3 + "\n binaryString = " + binaryString);
44
	doh.assertTrue(binaryString.length == 16); // section 3 has 16 bits
45
	doh.assertTrue(binaryString.charAt(0) == '1'); // first bit of section 3 is 1
46
	doh.assertTrue(binaryString.charAt(1) == '0'); // second bit of section 3 is 0
47
}
48
 
49
dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString = function(/*String*/uuidString){
50
	// summary:
51
	//		A helper function that's used by the registered test functions
52
	dojox.uuid.tests.uuid.checkValidityOfUuidString(uuidString);
53
	var arrayOfParts = uuidString.split("-");
54
	var section2 = arrayOfParts[2];
55
	doh.assertTrue(section2.charAt(0) == "1"); // Section 2 starts with a 1
56
}
57
 
58
dojox.uuid.tests.uuid.checkForPseudoNodeBitInTimeBasedUuidString = function(/*String*/uuidString){
59
	// summary:
60
	//		A helper function that's used by the registered test functions
61
	var arrayOfParts = uuidString.split("-");
62
	var section4 = arrayOfParts[4];
63
	var firstChar = section4.charAt(0);
64
	var HEX_RADIX = 16;
65
	var hexFirstChar = parseInt(firstChar, HEX_RADIX);
66
	var binaryString = hexFirstChar.toString(2);
67
	var firstBit;
68
	if(binaryString.length == 4){
69
		firstBit = binaryString.charAt(0);
70
	}else{
71
		firstBit = '0';
72
	}
73
	doh.assertTrue(firstBit == '1'); // first bit of section 4 is 1
74
}
75
 
76
doh.register("dojox.uuid.tests.uuid",
77
	[
78
		/*
79
		function test_uuid_performance(){
80
			var start = new Date();
81
			var startMS = start.valueOf();
82
			var nowMS = startMS;
83
			var i;
84
			var now;
85
			var numTrials = 100000;
86
 
87
			while(nowMS == startMS){
88
				now = new Date();
89
				nowMS = now.valueOf();
90
			}
91
 
92
			startMS = nowMS;
93
			for(i = 0; i < numTrials; ++i){
94
				var a = dojox.uuid.LightweightGenerator.generate();
95
			}
96
			now = new Date();
97
			nowMS = now.valueOf();
98
			var elapsedMS = nowMS - startMS;
99
			// dojo.log.debug("created " + numTrials + " UUIDs in " + elapsedMS + " milliseconds");
100
		},
101
		*/
102
 
103
		function test_uuid_capitalization(){
104
			var randomLowercaseString = "3b12f1df-5232-4804-897e-917bf397618a";
105
			var randomUppercaseString = "3B12F1DF-5232-4804-897E-917BF397618A";
106
 
107
			var timebasedLowercaseString = "b4308fb0-86cd-11da-a72b-0800200c9a66";
108
			var timebasedUppercaseString = "B4308FB0-86CD-11DA-A72B-0800200C9A66";
109
 
110
			var uuidRL = new dojox.uuid.Uuid(randomLowercaseString);
111
			var uuidRU = new dojox.uuid.Uuid(randomUppercaseString);
112
 
113
			var uuidTL = new dojox.uuid.Uuid(timebasedLowercaseString);
114
			var uuidTU = new dojox.uuid.Uuid(timebasedUppercaseString);
115
 
116
			doh.assertTrue(uuidRL.isEqual(uuidRU));
117
			doh.assertTrue(uuidRU.isEqual(uuidRL));
118
 
119
			doh.assertTrue(uuidTL.isEqual(uuidTU));
120
			doh.assertTrue(uuidTU.isEqual(uuidTL));
121
		},
122
 
123
		function test_uuid_constructor(){
124
			var uuid, uuidToo;
125
 
126
			var nilUuid = '00000000-0000-0000-0000-000000000000';
127
			uuid = new dojox.uuid.Uuid();
128
			doh.assertTrue(uuid == nilUuid); // 'new dojox.uuid.Uuid()' returns the Nil UUID
129
 
130
			var randomUuidString = "3b12f1df-5232-4804-897e-917bf397618a";
131
			uuid = new dojox.uuid.Uuid(randomUuidString);
132
			doh.assertTrue(uuid.isValid());
133
			doh.assertTrue(uuid.getVariant() == dojox.uuid.variant.DCE);
134
			doh.assertTrue(uuid.getVersion() == dojox.uuid.version.RANDOM);
135
			uuidToo = new dojox.uuid.Uuid(new String(randomUuidString));
136
			doh.assertTrue(uuid.isEqual(uuidToo));
137
 
138
			var timeBasedUuidString = "b4308fb0-86cd-11da-a72b-0800200c9a66";
139
			uuid = new dojox.uuid.Uuid(timeBasedUuidString);
140
			doh.assertTrue(uuid.isValid());
141
			doh.assertTrue(uuid.getVariant() == dojox.uuid.variant.DCE);
142
			doh.assertTrue(uuid.getVersion() == dojox.uuid.version.TIME_BASED);
143
			doh.assertTrue(uuid.getNode() == "0800200c9a66");
144
			var timestamp = uuid.getTimestamp();
145
			var date = uuid.getTimestamp(Date);
146
			var dateString = uuid.getTimestamp(String);
147
			var hexString = uuid.getTimestamp("hex");
148
			var now = new Date();
149
			doh.assertTrue(timestamp.valueOf() == date.valueOf());
150
			doh.assertTrue(hexString == "1da86cdb4308fb0");
151
			doh.assertTrue(timestamp < now);
152
		},
153
 
154
		function test_uuid_generators(){
155
			var generators = [
156
				dojox.uuid.generateNilUuid,
157
				dojox.uuid.generateRandomUuid,
158
				dojox.uuid.generateTimeBasedUuid
159
			];
160
 
161
			for(var i in generators){
162
				var generator = generators[i];
163
				var uuidString = generator();
164
 
165
				doh.assertTrue((typeof uuidString) == 'string');
166
				dojox.uuid.tests.uuid.checkValidityOfUuidString(uuidString);
167
 
168
				var uuid = new dojox.uuid.Uuid(uuidString);
169
				if(generator != dojox.uuid.generateNilUuid){
170
					doh.assertTrue(uuid.getVariant() == dojox.uuid.variant.DCE);
171
				}
172
 
173
				doh.assertTrue(uuid.isEqual(uuid));
174
				doh.assertTrue(uuid.compare(uuid) == 0);
175
				doh.assertTrue(dojox.uuid.Uuid.compare(uuid, uuid) == 0);
176
				dojox.uuid.tests.uuid.checkValidityOfUuidString(uuid.toString());
177
				doh.assertTrue(uuid.toString().length == 36);
178
 
179
				if(generator != dojox.uuid.generateNilUuid){
180
					var uuidStringOne = generator();
181
					var uuidStringTwo = generator();
182
					doh.assertTrue(uuidStringOne != uuidStringTwo);
183
 
184
					dojox.uuid.Uuid.setGenerator(generator);
185
					var uuidOne = new dojox.uuid.Uuid();
186
					var uuidTwo = new dojox.uuid.Uuid();
187
					doh.assertTrue(generator === dojox.uuid.Uuid.getGenerator());
188
					dojox.uuid.Uuid.setGenerator(null);
189
					doh.assertTrue(uuidOne != uuidTwo);
190
					doh.assertTrue(!uuidOne.isEqual(uuidTwo));
191
					doh.assertTrue(!uuidTwo.isEqual(uuidOne));
192
 
193
					var oneVsTwo = dojox.uuid.Uuid.compare(uuidOne, uuidTwo); // either 1 or -1
194
					var twoVsOne = dojox.uuid.Uuid.compare(uuidTwo, uuidOne); // either -1 or 1
195
					doh.assertTrue(oneVsTwo + twoVsOne == 0);
196
					doh.assertTrue(oneVsTwo != 0);
197
					doh.assertTrue(twoVsOne != 0);
198
 
199
					doh.assertTrue(!uuidTwo.isEqual(uuidOne));
200
				}
201
 
202
				if(generator == dojox.uuid.generateRandomUuid){
203
					doh.assertTrue(uuid.getVersion() == dojox.uuid.version.RANDOM);
204
				}
205
 
206
				if(generator == dojox.uuid.generateTimeBasedUuid){
207
					dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(uuid.toString());
208
					doh.assertTrue(uuid.getVersion() == dojox.uuid.version.TIME_BASED);
209
					doh.assertTrue(dojo.isString(uuid.getNode()));
210
					doh.assertTrue(uuid.getNode().length == 12);
211
					var timestamp = uuid.getTimestamp();
212
					var date = uuid.getTimestamp(Date);
213
					var dateString = uuid.getTimestamp(String);
214
					var hexString = uuid.getTimestamp("hex");
215
					doh.assertTrue(date instanceof Date);
216
					doh.assertTrue(timestamp.valueOf() == date.valueOf());
217
					doh.assertTrue(hexString.length == 15);
218
				}
219
			}
220
		},
221
 
222
		function test_uuid_nilGenerator(){
223
			var nilUuidString = '00000000-0000-0000-0000-000000000000';
224
			var uuidString = dojox.uuid.generateNilUuid();
225
			doh.assertTrue(uuidString == nilUuidString);
226
		},
227
 
228
		function test_uuid_timeBasedGenerator(){
229
			var uuid;   // an instance of dojox.uuid.Uuid
230
			var string; // a simple string literal
231
			var generator = dojox.uuid.generateTimeBasedUuid;
232
 
233
			var string1 = generator();
234
			var uuid2    = new dojox.uuid.Uuid(generator());
235
			var string3 = generator("017bf397618a");         // hardwareNode
236
			var string4 = generator("f17bf397618a");         // pseudoNode
237
			var string5 = generator(new String("017BF397618A"));
238
 
239
			dojox.uuid.generateTimeBasedUuid.setNode("017bf397618a");
240
			var string6 = generator(); // the generated UUID has node == "017bf397618a"
241
			var uuid7   = new dojox.uuid.Uuid(generator()); // the generated UUID has node == "017bf397618a"
242
			var returnedNode = dojox.uuid.generateTimeBasedUuid.getNode();
243
			doh.assertTrue(returnedNode == "017bf397618a");
244
 
245
			function getNode(string){
246
				var arrayOfStrings = string.split('-');
247
				return arrayOfStrings[4];
248
			}
249
			dojox.uuid.tests.uuid.checkForPseudoNodeBitInTimeBasedUuidString(string1);
250
			dojox.uuid.tests.uuid.checkForPseudoNodeBitInTimeBasedUuidString(uuid2.toString());
251
			dojox.uuid.tests.uuid.checkForPseudoNodeBitInTimeBasedUuidString(string4);
252
 
253
			doh.assertTrue(getNode(string3) == "017bf397618a");
254
			doh.assertTrue(getNode(string4) == "f17bf397618a");
255
			doh.assertTrue(getNode(string5) == "017bf397618a");
256
			doh.assertTrue(getNode(string6) == "017bf397618a");
257
			doh.assertTrue(uuid7.getNode() == "017bf397618a");
258
 
259
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(string1);
260
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(uuid2.toString());
261
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(string3);
262
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(string4);
263
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(string5);
264
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(string6);
265
			dojox.uuid.tests.uuid.checkValidityOfTimeBasedUuidString(uuid7.toString());
266
		},
267
 
268
		function test_uuid_invalidUuids(){
269
			var uuidStrings = [];
270
			uuidStrings.push("Hello world!");                          // not a UUID
271
			uuidStrings.push("3B12F1DF-5232-1804-897E-917BF39761");    // too short
272
			uuidStrings.push("3B12F1DF-5232-1804-897E-917BF39761-8A"); // extra '-'
273
			uuidStrings.push("3B12F1DF-5232-1804-897E917BF39761-8A");  // last '-' in wrong place
274
			uuidStrings.push("HB12F1DF-5232-1804-897E-917BF397618A");  // "HB12F1DF" is not a hex string
275
 
276
			var numberOfFailures = 0;
277
			for(var i in uuidStrings){
278
				var uuidString = uuidStrings[i];
279
				try{
280
					new dojox.uuid.Uuid(uuidString);
281
				}catch (e){
282
					++numberOfFailures;
283
				}
284
			}
285
			doh.assertTrue(numberOfFailures == uuidStrings.length);
286
		}
287
	]
288
);
289
 
290
 
291
 
292
/*
293
function test_uuid_get64bitArrayFromFloat(){
294
	// summary:
295
	//		This is a test we'd like to be able to run, but we can't run it
296
	//		because it tests a function which is private in generateTimeBasedUuid
297
	var x = Math.pow(2, 63) + Math.pow(2, 15);
298
	var result = dojox.uuid.generateTimeBasedUuid._get64bitArrayFromFloat(x);
299
	doh.assertTrue(result[0] === 0x8000);
300
	doh.assertTrue(result[1] === 0x0000);
301
	doh.assertTrue(result[2] === 0x0000);
302
	doh.assertTrue(result[3] === 0x8000);
303
 
304
	var date = new Date();
305
	x = date.valueOf();
306
	result = dojox.uuid.generateTimeBasedUuid._get64bitArrayFromFloat(x);
307
	var reconstructedFloat = result[0];
308
	reconstructedFloat *= 0x10000;
309
	reconstructedFloat += result[1];
310
	reconstructedFloat *= 0x10000;
311
	reconstructedFloat += result[2];
312
	reconstructedFloat *= 0x10000;
313
	reconstructedFloat += result[3];
314
 
315
	doh.assertTrue(reconstructedFloat === x);
316
}
317
 
318
function test_uuid_addTwo64bitArrays(){
319
	// summary:
320
	//		This is a test we'd like to be able to run, but we can't run it
321
	//		because it tests a function which is private in generateTimeBasedUuid
322
	var a = [0x0000, 0x0000, 0x0000, 0x0001];
323
	var b = [0x0FFF, 0xFFFF, 0xFFFF, 0xFFFF];
324
	var result = dojox.uuid.generateTimeBasedUuid._addTwo64bitArrays(a, b);
325
	doh.assertTrue(result[0] === 0x1000);
326
	doh.assertTrue(result[1] === 0x0000);
327
	doh.assertTrue(result[2] === 0x0000);
328
	doh.assertTrue(result[3] === 0x0000);
329
 
330
	a = [0x4000, 0x8000, 0x8000, 0x8000];
331
	b = [0x8000, 0x8000, 0x8000, 0x8000];
332
	result = dojox.uuid.generateTimeBasedUuid._addTwo64bitArrays(a, b);
333
	doh.assertTrue(result[0] === 0xC001);
334
	doh.assertTrue(result[1] === 0x0001);
335
	doh.assertTrue(result[2] === 0x0001);
336
	doh.assertTrue(result[3] === 0x0000);
337
 
338
	a = [7, 6, 2, 5];
339
	b = [1, 0, 3, 4];
340
	result = dojox.uuid.generateTimeBasedUuid._addTwo64bitArrays(a, b);
341
	doh.assertTrue(result[0] === 8);
342
	doh.assertTrue(result[1] === 6);
343
	doh.assertTrue(result[2] === 5);
344
	doh.assertTrue(result[3] === 9);
345
}
346
 
347
function test_uuid_multiplyTwo64bitArrays(){
348
	// summary:
349
	//		This is a test we'd like to be able to run, but we can't run it
350
	//		because it tests a function which is private in generateTimeBasedUuid
351
	var a = [     0, 0x0000, 0x0000, 0x0003];
352
	var b = [0x1111, 0x1234, 0x0000, 0xFFFF];
353
	var result = dojox.uuid.generateTimeBasedUuid._multiplyTwo64bitArrays(a, b);
354
	doh.assertTrue(result[0] === 0x3333);
355
	doh.assertTrue(result[1] === 0x369C);
356
	doh.assertTrue(result[2] === 0x0002);
357
	doh.assertTrue(result[3] === 0xFFFD);
358
 
359
	a = [0, 0, 0, 5];
360
	b = [0, 0, 0, 4];
361
	result = dojox.uuid.generateTimeBasedUuid._multiplyTwo64bitArrays(a, b);
362
	doh.assertTrue(result[0] === 0);
363
	doh.assertTrue(result[1] === 0);
364
	doh.assertTrue(result[2] === 0);
365
	doh.assertTrue(result[3] === 20);
366
 
367
	a = [0, 0, 2, 5];
368
	b = [0, 0, 3, 4];
369
	result = dojox.uuid.generateTimeBasedUuid._multiplyTwo64bitArrays(a, b);
370
	doh.assertTrue(result[0] === 0);
371
	doh.assertTrue(result[1] === 6);
372
	doh.assertTrue(result[2] === 23);
373
	doh.assertTrue(result[3] === 20);
374
}
375
*/
376
 
377
}