3 <script src=
"https://cdn.rawgit.com/google/closure-library/master/closure/goog/base.js"></script>
4 <script src=
"../../../../../ui/webui/resources/js/cr.js"></script>
5 <script src=
"screen_context.js"></script>
8 goog
.require('goog.testing.jsunit');
14 function callSuccessful(f
) {
23 function checkThrows(f
) {
24 assertFalse(callSuccessful(f
));
27 function checkNotThrows(f
) {
28 assertTrue(callSuccessful(f
));
31 function testSimple() {
32 var context
= new login
.ScreenContext
;
33 assertFalse(context
.hasChanges());
35 assertFalse(context
.hasKey('key0'));
37 var rv
= context
.set('key0', true);
39 assertTrue(context
.hasKey('key0'));
40 assertTrue(context
.get('key0'));
41 assertTrue(context
.get('key0', false));
42 assertTrue(context
.hasChanges());
44 rv
= context
.set('key0', true);
47 rv
= context
.set('key0', false);
49 assertTrue(context
.hasKey('key0'));
50 assertFalse(context
.get('key0'));
51 assertFalse(context
.get('key0', true));
52 assertTrue(context
.hasChanges());
54 assertFalse(context
.hasKey('key1'));
56 assertEquals(1, context
.get('key1', 1));
57 rv
= context
.set('key1', 2);
59 assertTrue(context
.hasKey('key1'));
60 assertEquals(2, context
.get('key1'));
61 assertEquals(2, context
.get('key1', 1));
64 function testChanges() {
65 var context
= new login
.ScreenContext
;
66 assertFalse(context
.hasChanges());
68 var rv
= context
.set('key0', 2);
70 assertEquals(2, context
.get('key0'));
71 assertTrue(context
.hasChanges());
73 var changes
= context
.getChangesAndReset();
74 assertFalse(context
.hasChanges());
76 assertEquals(1, Object
.keys(changes
).length
);
78 assertEquals(2, changes
['key0']);
80 rv
= context
.set('key0', 3);
82 assertEquals(3, context
.get('key0', 3));
83 assertTrue(context
.hasChanges());
85 rv
= context
.set('key0', 2);
87 assertTrue(context
.hasChanges());
90 function testComplexChanges() {
91 var context
= new login
.ScreenContext
;
92 assertFalse(context
.hasChanges());
94 context
.set('key0', 'value0');
95 context
.set('key1', true);
96 context
.set('key2', 3.14159);
97 assertTrue(context
.hasChanges());
99 // Get all changes and verify them.
100 var changes
= context
.getChangesAndReset();
101 assertFalse(context
.hasChanges());
102 assertEquals(3, Object
.keys(changes
).length
);
104 assertEquals('value0', changes
['key0']);
105 assertEquals(true, changes
['key1']);
106 assertEquals(3.14159, changes
['key2']);
108 context
.set('key0', 'value1');
109 assertTrue(context
.hasChanges());
111 context
.set('key0', 'value0');
112 assertTrue(context
.hasChanges());
114 changes
= context
.getChangesAndReset();
115 assertFalse(context
.hasChanges());
116 assertEquals(1, Object
.keys(changes
).length
);
117 assertEquals('value0', changes
['key0']);
120 function testApplyChanges() {
121 var context
= new login
.ScreenContext
;
122 assertFalse(context
.hasChanges());
130 var keys
= context
.applyChanges(changes
);
132 assertEquals(3, keys
.length
);
134 assertEquals('key0', keys
[0]);
135 assertEquals('key1', keys
[1]);
136 assertEquals('key2', keys
[2]);
138 assertFalse(context
.hasChanges());
139 assertEquals('value0', context
.get('key0'));
140 assertEquals(1, context
.get('key1'));
141 assertTrue(context
.get('key2'));
144 function testErrorHandling() {
145 function createContext() {
146 return new login
.ScreenContext
;
150 checkThrows(function() {
151 createContext().set(true, 10);
153 checkThrows(function() {
154 createContext().set(new Object
, 10);
156 checkThrows(function() {
157 createContext().set(10, 10);
159 checkNotThrows(function() {
160 createContext().set('key0', 10);
162 checkThrows(function() {
163 var c
= createContext();
167 checkNotThrows(function() {
168 var c
= createContext();
172 checkThrows(function() {
173 createContext().hasKey(20);
177 checkThrows(function() {
178 createContext().get('key');
180 checkNotThrows(function() {
181 createContext().get('key', 10);
184 /* Invalid values. */
185 checkThrows(function() {
186 createContext().set('key0', new Object());
188 checkThrows(function() {
189 createContext().set('key0', new Boolean(true));
192 /* Applying diff to context with changes. */
193 checkThrows(function() {
194 var c
= createContext();
195 c
.set('key', 'value');
196 c
.applyChanges({'key1': 'value1'});
198 checkNotThrows(function() {
199 var c
= createContext();
200 c
.set('key', 'value');
201 c
.getChangesAndReset();
202 c
.applyChanges({'key1': 'value1'});