OLD | NEW |
| (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 import os | |
5 import shutil | |
6 import tempfile | |
7 import unittest | |
8 | |
9 from telemetry import browser_finder | |
10 from telemetry import extension_dict_backend | |
11 from telemetry import extension_to_load | |
12 from telemetry import options_for_unittests | |
13 | |
14 class ExtensionTest(unittest.TestCase): | |
15 def setUp(self): | |
16 extension_path = os.path.join(os.path.dirname(__file__), | |
17 '..', 'unittest_data', 'simple_extension') | |
18 load_extension = extension_to_load.ExtensionToLoad(extension_path) | |
19 | |
20 options = options_for_unittests.GetCopy() | |
21 options.extensions_to_load = [load_extension] | |
22 browser_to_create = browser_finder.FindBrowser(options) | |
23 | |
24 self._browser = None | |
25 self._extension = None | |
26 if not browser_to_create: | |
27 # May not find a browser that supports extensions. | |
28 return | |
29 self._browser = browser_to_create.Create() | |
30 self._extension = self._browser.extensions[load_extension] | |
31 self.assertTrue(self._extension) | |
32 | |
33 def tearDown(self): | |
34 if self._browser: | |
35 self._browser.Close() | |
36 | |
37 def testExtensionBasic(self): | |
38 """Test ExtensionPage's ExecuteJavaScript and EvaluateJavaScript.""" | |
39 if not self._extension: | |
40 return | |
41 self._extension.ExecuteJavaScript('setTestVar("abcdef")') | |
42 self.assertEquals('abcdef', | |
43 self._extension.EvaluateJavaScript('_testVar')) | |
44 | |
45 def testDisconnect(self): | |
46 """Test that ExtensionPage.Disconnect exists by calling it. | |
47 EvaluateJavaScript should reconnect.""" | |
48 if not self._extension: | |
49 return | |
50 self._extension.Disconnect() | |
51 self.assertEquals(2, self._extension.EvaluateJavaScript('1+1')) | |
52 | |
53 class NonExistentExtensionTest(unittest.TestCase): | |
54 def testNonExistentExtensionPath(self): | |
55 """Test that a non-existent extension path will raise an exception.""" | |
56 extension_path = os.path.join(os.path.dirname(__file__), | |
57 '..', 'unittest_data', 'foo') | |
58 self.assertRaises(extension_to_load.ExtensionPathNonExistentException, | |
59 lambda: extension_to_load.ExtensionToLoad(extension_path)) | |
60 | |
61 def testExtensionNotLoaded(self): | |
62 """Querying an extension that was not loaded will return None""" | |
63 extension_path = os.path.join(os.path.dirname(__file__), | |
64 '..', 'unittest_data', 'simple_extension') | |
65 load_extension = extension_to_load.ExtensionToLoad(extension_path) | |
66 options = options_for_unittests.GetCopy() | |
67 browser_to_create = browser_finder.FindBrowser(options) | |
68 with browser_to_create.Create() as b: | |
69 if b.supports_extensions: | |
70 self.assertRaises(extension_dict_backend.ExtensionNotFoundException, | |
71 lambda: b.extensions[load_extension]) | |
72 | |
73 class MultipleExtensionTest(unittest.TestCase): | |
74 def setUp(self): | |
75 """ Copy the manifest and background.js files of simple_extension to a | |
76 number of temporary directories to load as extensions""" | |
77 self._extension_dirs = [tempfile.mkdtemp() | |
78 for i in range(3)] # pylint: disable=W0612 | |
79 src_extension_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), | |
80 '..', 'unittest_data', 'simple_extension')) | |
81 manifest_path = os.path.join(src_extension_dir, 'manifest.json') | |
82 script_path = os.path.join(src_extension_dir, 'background.js') | |
83 for d in self._extension_dirs: | |
84 shutil.copy(manifest_path, d) | |
85 shutil.copy(script_path, d) | |
86 self._extensions_to_load = [extension_to_load.ExtensionToLoad(d) | |
87 for d in self._extension_dirs] | |
88 options = options_for_unittests.GetCopy() | |
89 options.extensions_to_load = self._extensions_to_load | |
90 browser_to_create = browser_finder.FindBrowser(options) | |
91 self._browser = None | |
92 # May not find a browser that supports extensions. | |
93 if browser_to_create: | |
94 self._browser = browser_to_create.Create() | |
95 | |
96 def tearDown(self): | |
97 if self._browser: | |
98 self._browser.Close() | |
99 for d in self._extension_dirs: | |
100 shutil.rmtree(d) | |
101 | |
102 def testMultipleExtensions(self): | |
103 if not self._browser: | |
104 return | |
105 | |
106 # Test contains. | |
107 loaded_extensions = filter(lambda e: e in self._browser.extensions, | |
108 self._extensions_to_load) | |
109 self.assertEqual(len(loaded_extensions), len(self._extensions_to_load)) | |
110 | |
111 for load_extension in self._extensions_to_load: | |
112 extension = self._browser.extensions[load_extension] | |
113 assert extension | |
114 extension.ExecuteJavaScript('setTestVar("abcdef")') | |
115 self.assertEquals('abcdef', extension.EvaluateJavaScript('_testVar')) | |
OLD | NEW |