2 <script src="../../resources/js-test.js"></script>
4 description('IDL dictionary unittest');
6 var testObject1 = { foo: 'x' };
7 var testObject2 = { bar: 'y' };
9 if (window.internals && internals.dictionaryTest) {
10 var dictionaryTest = window.internals.dictionaryTest();
12 debug('Test for setting an empty dictionary');
13 dictionaryTest.set({});
14 dict = dictionaryTest.get();
15 shouldBeUndefined('dict.longMember');
16 shouldBe('dict.longMemberWithDefault', '42');
17 shouldBeUndefined('dict.longOrNullMember');
18 shouldBeNull('dict.longOrNullMemberWithDefault');
19 shouldBeUndefined('dict.booleanMember');
20 shouldBeUndefined('dict.doubleMember');
21 shouldBeUndefined('dict.stringMember');
22 shouldBeEqualToString('dict.stringMemberWithDefault', 'defaultStringValue');
23 shouldBeUndefined('dict.stringSequenceMember');
24 shouldBeUndefined('dict.stringSequenceOrNullMember');
25 shouldBeUndefined('dict.elementMember');
26 shouldBeUndefined('dict.elementOrNullMember');
27 shouldBeUndefined('dict.enumMember');
28 shouldBeEqualToString('dict.enumMemberWithDefault', 'foo');
29 shouldBeUndefined('dict.enumOrNullMember');
30 shouldBeUndefined('dict.objectMember');
31 shouldBeNull('dict.objectOrNullMemberWithDefault');
34 debug('Test for setting undefined');
35 dictionaryTest.set(undefined);
36 dict = dictionaryTest.get();
37 shouldBeUndefined('dict.longMember');
38 shouldBe('dict.longMemberWithDefault', '42');
39 shouldBeUndefined('dict.longOrNullMember');
40 shouldBeNull('dict.longOrNullMemberWithDefault');
41 shouldBeUndefined('dict.booleanMember');
42 shouldBeUndefined('dict.doubleMember');
43 shouldBeUndefined('dict.stringMember');
44 shouldBeEqualToString('dict.stringMemberWithDefault', 'defaultStringValue');
45 shouldBeUndefined('dict.stringSequenceMember');
46 shouldBeUndefined('dict.stringSequenceOrNullMember');
47 shouldBeUndefined('dict.elementMember');
48 shouldBeUndefined('dict.elementOrNullMember');
49 shouldBeUndefined('dict.objectMember');
50 shouldBeNull('dict.objectOrNullMemberWithDefault');
53 var element1 = document.createElement('div');
55 debug('Test for setting valid values');
58 longMemberWithDefault: 2,
60 longOrNullMemberWithDefault: 4,
61 stringMember: 'modifiedString1',
62 stringMemberWithDefault: 'modifiedString2',
65 stringSequenceMember: ['foo', 'bar', 'baz'],
66 stringSequenceOrNullMember: [],
67 elementMember: element1,
68 elementOrNullMember: null,
70 enumMemberWithDefault: 'bar',
71 enumOrNullMember: 'baz',
72 objectMember: testObject1,
73 objectOrNullMemberWithDefault: testObject2,
75 dict = dictionaryTest.get();
76 shouldBe('dict.longMember', '1');
77 shouldBe('dict.longMemberWithDefault', '2');
78 shouldBe('dict.longOrNullMember', '3');
79 shouldBe('dict.longOrNullMemberWithDefault', '4');
80 shouldBeEqualToString('dict.stringMember', 'modifiedString1');
81 shouldBeEqualToString('dict.stringMemberWithDefault', 'modifiedString2');
82 shouldBeTrue('dict.booleanMember');
83 shouldBe('dict.doubleMember', '3.14');
84 shouldBe('dict.stringSequenceMember', '["foo", "bar", "baz"]');
85 shouldBe('dict.stringSequenceOrNullMember', '[]');
86 shouldBe('dict.elementMember', 'element1');
87 // This will be undefined as the spec says
88 shouldBeUndefined('dict.elementOrNullMember');
89 shouldBeEqualToString('dict.enumMember', 'foo');
90 shouldBeEqualToString('dict.enumMemberWithDefault', 'bar');
91 shouldBeEqualToString('dict.enumOrNullMember', 'baz');
92 shouldBe('dict.objectMember', 'testObject1');
93 shouldBe('dict.objectOrNullMemberWithDefault', 'testObject2');
96 debug('Test for explicit undefined or null, and missing members');
98 longMember: undefined,
99 longMemberWithDefault: null,
100 longOrNullMember: undefined,
101 longOrNullMemberWithDefault: null,
103 dict = dictionaryTest.get();
104 shouldBeUndefined('dict.longMember');
105 shouldBe('dict.longMemberWithDefault', '42');
106 shouldBeUndefined('dict.longOrNullMember');
107 // Nullable and its default value is null
108 shouldBeNull('dict.longOrNullMemberWithDefault');
111 debug('Test for setting invalid member');
112 dictionaryTest.set({invalidMember: 'shouldNotBeSet'});
113 dict = dictionaryTest.get();
114 shouldBeUndefined('dict.invalidMember');
117 debug('Test for setting invalid enum value');
118 shouldThrow("dictionaryTest.set({enumMember: 'invalid'})");
121 debug('Test for setting invalid object value');
122 shouldThrow("dictionaryTest.set({objectMember: 42})");
123 shouldThrow("dictionaryTest.set({objectMember: 'invalid'})");
126 debug('Test for passing invalid dictionary values');
127 shouldThrow("dictionaryTest.set(42)");
128 shouldThrow("dictionaryTest.set('string')");