Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Side by Side Diff: chrome/test/data/extensions/api_test/declarative/api/background.js

Issue 9315010: RulesRegistry for declarative APIs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 var declarative = chrome.experimental.declarative;
6
7 function createTestCondition(opt_testParameter) {
8 var result = {
9 "instanceType": "experimental.declarative.TestCondition"
10 };
11 if (opt_testParameter) {
12 result["testParameter"] = opt_testParameter;
13 }
14 return result;
15 }
16
17 function createTestAction(opt_testParameter) {
18 var result = {
19 "instanceType": "experimental.declarative.TestAction"
20 };
21 if (opt_testParameter) {
22 result["testParameter"] = opt_testParameter;
23 }
24 return result;
25 }
26
27 var inputRule0 = {
28 // No 'id', this should be filled by the API.
29 "conditions": [createTestCondition("test1"), createTestCondition("test2")],
30 "actions": [createTestAction("action1"), createTestAction("action2")]
31 // No 'priority', this should be filled by the API.
32 }
33
34 var outputRule0 = {
35 "id": "_0_",
36 "conditions": [createTestCondition("test1"), createTestCondition("test2")],
37 "actions": [createTestAction("action1"), createTestAction("action2")],
38 "priority": 100
39 }
40
41 var inputRule1 = {
42 "id": "my_rule_id",
43 "conditions": [],
44 "actions": [],
45 "priority": 10
46 }
47
48 var outputRule1 = inputRule1;
49
50 var inputRule2 = {
51 // No 'id', this should be filled by the API.
52 "conditions": [createTestCondition("test3")],
53 "actions": [createTestAction("action3")]
54 // No 'priority', this should be filled by the API.
55 }
56
57 var outputRule2 = {
58 "id": "_1_",
59 "conditions": [createTestCondition("test3")],
60 "actions": [createTestAction("action1")],
61 "priority": 100
62 }
63
64 var invalidRule0 = {
65 "conditions": [createTestCondition("test1")]
66 // "actions" is missing but not optional.
67 };
68
69 var invalidRule1 = {
70 "conditions": [createTestCondition("test1")],
71 // "actions" contains an invalid action (separate test because this validation
72 // happens on a different code path).
73 "actions": [{"key": "value"}]
74 };
75
76 chrome.test.runTests([
77 // Add adding two simple rules and check that their optional fields are set
78 // correctly in the call back function.
79 function testAddRules() {
80 var callback = function(rules) {
81 chrome.test.assertEq(2, rules.length);
82 // API should have generated id and priority fields.
83 chrome.test.assertTrue("id" in rules[0]);
84 chrome.test.assertEq(100, rules[0].priority);
85 chrome.test.assertEq([outputRule0, outputRule1], rules);
86 chrome.test.succeed();
87 };
88 declarative.testEvent.addRules([inputRule0, inputRule1], callback);
89 },
90 // Check that getRules() returns all rules if no filter is passed.
91 function testGetRules() {
92 var callback = function(rules) {
93 // We are not given any gurantee on the order in which rules are returned.
94 chrome.test.assertTrue(
95 chrome.test.checkDeepEq([outputRule0, outputRule1], rules) ||
96 chrome.test.checkDeepEq([outputRule1, outputRule0], rules));
97 chrome.test.succeed();
98 }
99 declarative.testEvent.getRules([], callback);
100 },
101 // Check that getRules() returns all rules if rules are filtered by ID.
102 function testSelectiveGetRules() {
103 var callback = function(rules) {
104 chrome.test.assertEq([outputRule1], rules);
105 chrome.test.succeed();
106 }
107 declarative.testEvent.getRules(["my_rule_id"], callback);
108 },
109 // Check that we can remove individual rules.
110 function testSelectiveRemoveRules() {
111 var callback = function(rules) {
112 chrome.test.succeed();
113 }
114 declarative.testEvent.removeRules(["my_rule_id"], callback);
115 },
116 // Check that after removal, the rules are really gone.
117 function testGetRemainingRules() {
118 var callback = function(rules) {
119 chrome.test.assertEq([outputRule0], rules);
120 chrome.test.succeed();
121 }
122 declarative.testEvent.getRules([], callback);
123 },
124 // Check that rules are assigned unique IDs.
125 function testIdGeneration() {
126 var callback = function(rules) {
127 chrome.test.assertEq(1, rules.length);
128 // API should have generated id and priority fields.
129 chrome.test.assertTrue("id" in rules[0]);
130 // The IDs should be distinct.
131 chrome.test.assertFalse(outputRule0["id"] === rules[0]["id"]);
132 chrome.test.succeed();
133 };
134 declarative.testEvent.addRules([inputRule2], callback);
135 },
136 // Check that we can remove all rules at once.
137 function testRemovingAllRules() {
138 var callback = function() {
139 chrome.test.succeed();
140 }
141 declarative.testEvent.removeRules([], callback);
142 },
143 // Check that the rules are actually gone.
144 function testAllRulesRemoved() {
145 var callback = function(rules) {
146 chrome.test.assertEq(0, rules.length);
147 chrome.test.succeed();
148 }
149 declarative.testEvent.getRules([], callback);
150 },
151 // Check that validation is performed.
152 function testValidation() {
153 var fail = function() {
154 chrome.test.fail("An exception was expected");
155 };
156 try {
157 declarative.testEvent.addRules([invalidRule0], fail);
158 fail();
159 } catch (e) {}
160 try {
161 declarative.testEvent.addRules([invalidRule1], fail);
162 fail();
163 } catch (e) {}
164 // None of these rules should have been registered.
165 var callback = function(rules) {
166 chrome.test.assertEq(0, rules.length);
167 chrome.test.succeed();
168 };
169 declarative.testEvent.getRules([], callback);
170 },
171 // Finally we add one additional rule, to check that is is removed
172 // on page unload.
173 function testAddRules() {
174 var callback = function(rules) {
175 chrome.test.assertEq(1, rules.length);
176 chrome.test.succeed();
177 };
178 declarative.testEvent.addRules([inputRule0], callback);
179 },
180 ]);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698