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.
9 class ModelTest(unittest
.TestCase
):
11 self
.model
= model
.Model()
12 self
.permissions_json
= json
.loads(open('test/permissions.json').read())
13 self
.model
.AddNamespace(self
.permissions_json
[0],
14 'path/to/permissions.json')
15 self
.permissions
= self
.model
.namespaces
.get('permissions')
16 self
.windows_json
= json
.loads(open('test/windows.json').read())
17 self
.model
.AddNamespace(self
.windows_json
[0],
18 'path/to/window.json')
19 self
.windows
= self
.model
.namespaces
.get('windows')
20 self
.tabs_json
= json
.loads(open('test/tabs.json').read())
21 self
.model
.AddNamespace(self
.tabs_json
[0],
23 self
.tabs
= self
.model
.namespaces
.get('tabs')
25 def testNamespaces(self
):
26 self
.assertEquals(3, len(self
.model
.namespaces
))
27 self
.assertTrue(self
.permissions
)
29 def testNamespaceNoCompile(self
):
30 self
.permissions_json
[0]['namespace'] = 'something'
31 self
.permissions_json
[0]['nocompile'] = True
32 self
.model
.AddNamespace(self
.permissions_json
[0],
33 'path/to/something.json')
34 self
.assertEquals(3, len(self
.model
.namespaces
))
36 def testHasFunctions(self
):
37 self
.assertEquals(["contains", "getAll", "remove", "request"],
38 sorted(self
.permissions
.functions
.keys()))
40 def testFunctionNoCallback(self
):
41 del (self
.permissions_json
[0]['functions'][0]['parameters'][0])
42 self
.assertRaises(AssertionError, self
.model
.AddNamespace
,
43 self
.permissions_json
[0], 'path/to/something.json')
45 def testFunctionNoCompile(self
):
46 # tabs.json has 2 functions marked as nocompile (connect, sendRequest)
47 self
.assertEquals(["captureVisibleTab", "create", "detectLanguage",
48 "executeScript", "get", "getAllInWindow", "getCurrent",
49 "getSelected", "highlight", "insertCSS", "move", "query", "reload",
51 sorted(self
.tabs
.functions
.keys())
54 def testHasTypes(self
):
55 self
.assertEquals(['Tab'], self
.tabs
.types
.keys())
56 self
.assertEquals(['Permissions'], self
.permissions
.types
.keys())
57 self
.assertEquals(['Window'], self
.windows
.types
.keys())
59 def testHasProperties(self
):
60 self
.assertEquals(["active", "favIconUrl", "highlighted", "id",
61 "incognito", "index", "pinned", "selected", "status", "title", "url",
63 sorted(self
.tabs
.types
['Tab'].properties
.keys()))
65 def testProperties(self
):
66 string_prop
= self
.tabs
.types
['Tab'].properties
['status']
67 self
.assertEquals(model
.PropertyType
.STRING
, string_prop
.type_
)
68 integer_prop
= self
.tabs
.types
['Tab'].properties
['id']
69 self
.assertEquals(model
.PropertyType
.INTEGER
, integer_prop
.type_
)
70 array_prop
= self
.windows
.types
['Window'].properties
['tabs']
71 self
.assertEquals(model
.PropertyType
.ARRAY
, array_prop
.type_
)
72 self
.assertEquals(model
.PropertyType
.REF
, array_prop
.item_type
.type_
)
73 self
.assertEquals('Tab', array_prop
.item_type
.ref_type
)
74 object_prop
= self
.tabs
.functions
['query'].params
[0]
75 self
.assertEquals(model
.PropertyType
.OBJECT
, object_prop
.type_
)
77 ["active", "highlighted", "pinned", "status", "title", "url",
78 "windowId", "windowType"],
79 sorted(object_prop
.properties
.keys()))
81 def testChoices(self
):
82 self
.assertEquals(model
.PropertyType
.CHOICES
,
83 self
.tabs
.functions
['move'].params
[0].type_
)
85 def testPropertyNotImplemented(self
):
86 (self
.permissions_json
[0]['types'][0]
87 ['properties']['permissions']['type']) = 'something'
88 self
.assertRaises(NotImplementedError, self
.model
.AddNamespace
,
89 self
.permissions_json
[0], 'path/to/something.json')
91 def testDescription(self
):
93 self
.permissions
.functions
['contains'].params
[0].description
)
94 self
.assertEquals('True if the extension has the specified permissions.',
95 self
.permissions
.functions
['contains'].callback
.params
[0].description
)
97 def testPropertyUnixName(self
):
98 param
= self
.tabs
.functions
['move'].params
[0]
99 self
.assertEquals('tab_ids', param
.unix_name
)
100 self
.assertRaises(AttributeError,
101 param
.choices
[model
.PropertyType
.INTEGER
].GetUnixName
)
102 param
.choices
[model
.PropertyType
.INTEGER
].unix_name
= 'asdf'
103 param
.choices
[model
.PropertyType
.INTEGER
].unix_name
= 'tab_ids_integer'
104 self
.assertEquals('tab_ids_integer',
105 param
.choices
[model
.PropertyType
.INTEGER
].unix_name
)
106 self
.assertRaises(AttributeError,
107 param
.choices
[model
.PropertyType
.INTEGER
].SetUnixName
, 'breakage')
109 if __name__
== '__main__':