- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / chromeos / login / screen_context_test.html
1 <!DOCTYPE html>
2 <title></title>
3 <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
4 <script src="../../../../../ui/webui/resources/js/cr.js"></script>
5 <script src="screen_context.js"></script>
6 <script>
7
8 goog.require('goog.testing.jsunit');
9
10 </script>
11 <body>
12 <script>
13
14 function callSuccessful(f) {
15   try {
16     f();
17   } catch (e) {
18     return false;
19   }
20   return true;
21 }
22
23 function checkThrows(f) {
24   assertFalse(callSuccessful(f));
25 }
26
27 function checkNotThrows(f) {
28   assertTrue(callSuccessful(f));
29 }
30
31 function testSimple() {
32   var context = new login.ScreenContext;
33   assertFalse(context.hasChanges());
34
35   assertFalse(context.hasKey('key0'));
36
37   var rv = context.set('key0', true);
38   assertTrue(rv);
39   assertTrue(context.hasKey('key0'));
40   assertTrue(context.get('key0'));
41   assertTrue(context.get('key0', false));
42   assertTrue(context.hasChanges());
43
44   rv = context.set('key0', true);
45   assertFalse(rv);
46
47   rv = context.set('key0', false);
48   assertTrue(rv);
49   assertTrue(context.hasKey('key0'));
50   assertFalse(context.get('key0'));
51   assertFalse(context.get('key0', true));
52   assertTrue(context.hasChanges());
53
54   assertFalse(context.hasKey('key1'));
55
56   assertEquals(1, context.get('key1', 1));
57   rv = context.set('key1', 2);
58   assertTrue(rv);
59   assertTrue(context.hasKey('key1'));
60   assertEquals(2, context.get('key1'));
61   assertEquals(2, context.get('key1', 1));
62 }
63
64 function testChanges() {
65   var context = new login.ScreenContext;
66   assertFalse(context.hasChanges());
67
68   var rv = context.set('key0', 2);
69   assertTrue(rv);
70   assertEquals(2, context.get('key0'));
71   assertTrue(context.hasChanges());
72
73   var changes = context.getChangesAndReset();
74   assertFalse(context.hasChanges());
75
76   assertEquals(1, Object.keys(changes).length);
77
78   assertEquals(2, changes['key0']);
79
80   rv = context.set('key0', 3);
81   assertTrue(rv);
82   assertEquals(3, context.get('key0', 3));
83   assertTrue(context.hasChanges());
84
85   rv = context.set('key0', 2);
86   assertTrue(rv);
87   assertTrue(context.hasChanges());
88 }
89
90 function testComplexChanges() {
91   var context = new login.ScreenContext;
92   assertFalse(context.hasChanges());
93
94   context.set('key0', 'value0');
95   context.set('key1', true);
96   context.set('key2', 3.14159);
97   assertTrue(context.hasChanges());
98
99   // Get all changes and verify them.
100   var changes = context.getChangesAndReset();
101   assertFalse(context.hasChanges());
102   assertEquals(3, Object.keys(changes).length);
103
104   assertEquals('value0', changes['key0']);
105   assertEquals(true, changes['key1']);
106   assertEquals(3.14159, changes['key2']);
107
108   context.set('key0', 'value1');
109   assertTrue(context.hasChanges());
110
111   context.set('key0', 'value0');
112   assertTrue(context.hasChanges());
113
114   changes = context.getChangesAndReset();
115   assertFalse(context.hasChanges());
116   assertEquals(1, Object.keys(changes).length);
117   assertEquals('value0', changes['key0']);
118 }
119
120 function testApplyChanges() {
121   var context = new login.ScreenContext;
122   assertFalse(context.hasChanges());
123   
124   var changes = {
125     key0: 'value0',
126     key1: 1,
127     key2: true
128   };
129
130   var keys = context.applyChanges(changes);
131
132   assertEquals(3, keys.length);
133   keys.sort();
134   assertEquals('key0', keys[0]);
135   assertEquals('key1', keys[1]);
136   assertEquals('key2', keys[2]);
137
138   assertFalse(context.hasChanges());
139   assertEquals('value0', context.get('key0'));
140   assertEquals(1, context.get('key1'));
141   assertTrue(context.get('key2'));
142 }
143
144 function testErrorHandling() {
145   function createContext() {
146     return new login.ScreenContext;
147   }
148
149   /* Invalid keys. */
150   checkThrows(function() {
151     createContext().set(true, 10);
152   });
153   checkThrows(function() {
154     createContext().set(new Object, 10);
155   });
156   checkThrows(function() {
157     createContext().set(10, 10);
158   });
159   checkNotThrows(function() {
160     createContext().set('key0', 10);
161   });
162   checkThrows(function() {
163     var c = createContext();
164     c.set('10', 10);
165     c.get(10);
166   });
167   checkNotThrows(function() {
168     var c = createContext();
169     c.set('10', 10);
170     c.get('10');
171   });
172   checkThrows(function() {
173     createContext().hasKey(20);
174   });
175
176   /* Missing key. */
177   checkThrows(function() {
178     createContext().get('key');
179   });
180   checkNotThrows(function() {
181     createContext().get('key', 10);
182   });
183   
184   /* Invalid values. */
185   checkThrows(function() {
186     createContext().set('key0', new Object());
187   });
188   checkThrows(function() {
189     createContext().set('key0', new Boolean(true));
190   });
191
192   /* Applying diff to context with changes. */
193   checkThrows(function() {
194     var c = createContext();
195     c.set('key', 'value');
196     c.applyChanges({'key1': 'value1'});
197   });
198   checkNotThrows(function() {
199     var c = createContext();
200     c.set('key', 'value');
201     c.getChangesAndReset();
202     c.applyChanges({'key1': 'value1'});
203   });
204 }
205
206 </script>
207 </body>