Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / third_party / tvcm / tvcm / module_unittest.py
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5 """Tests for the module module, which contains Module and related classes."""
6
7 import unittest
8
9 from tvcm import fake_fs
10 from tvcm import module
11 from tvcm import strip_js_comments
12 from tvcm import resource_loader
13 from tvcm import project as project_module
14
15 class ModuleIntegrationTests(unittest.TestCase):
16   def test_module(self):
17     fs = fake_fs.FakeFS()
18     fs.AddFile('/src/x.js', """
19 'use strict';
20 tvcm.require('y');
21 tvcm.require('z');
22 tvcm.exportTo('xyz', function() { });
23 """)
24     fs.AddFile('/src/y.js', """
25 'use strict';
26 tvcm.require('z');
27 tvcm.exportTo('xyz', function() { });
28 """)
29     fs.AddFile('/src/z.js', """
30 'use strict';
31 tvcm.exportTo('xyz', function() { });
32 """)
33     with fs:
34       project = project_module.Project(['/src/'],
35                                        include_tvcm_paths=False)
36       loader = resource_loader.ResourceLoader(project)
37       x_module = loader.load_module('x')
38
39       self.assertEquals([loader.loaded_modules['y'],
40                          loader.loaded_modules['z']],
41                         x_module.dependent_modules)
42
43       already_loaded_set = set()
44       load_sequence = []
45       x_module.compute_load_sequence_recursive(load_sequence, already_loaded_set)
46
47       self.assertEquals([loader.loaded_modules['z'],
48                          loader.loaded_modules['y'],
49                          x_module],
50                         load_sequence)
51
52   def testBasic(self):
53     fs = fake_fs.FakeFS()
54     fs.AddFile('/x/src/my_module.js', """
55 'use strict';
56 tvcm.require('tvcm.foo');
57 tvcm.exportTo('foo', function() {
58 });
59 """)
60     fs.AddFile('/x/tvcm/foo.js', """
61 'use strict';
62 tvcm.require('tvcm.foo');
63 tvcm.exportTo('foo', function() {
64 });
65 """);
66     project = project_module.Project(['/x'],
67                                      include_tvcm_paths=False)
68     loader = resource_loader.ResourceLoader(project)
69     with fs:
70       my_module = loader.load_module(module_name = 'src.my_module')
71       assert [x.name for x in my_module.dependent_modules] == ['tvcm.foo']
72       assert my_module.dependent_modules[0].name == 'tvcm.foo'
73
74   def testDepsExceptionContext(self):
75     fs = fake_fs.FakeFS()
76     fs.AddFile('/x/src/my_module.js', """
77 'use strict';
78 tvcm.require('tvcm.foo');
79 tvcm.exportTo('foo', function() {
80 });
81 """)
82     fs.AddFile('/x/tvcm/foo.js', """
83 'use strict';
84 tvcm.require('missing');
85 tvcm.exportTo('foo', function() {
86 });
87 """);
88     project = project_module.Project(['/x'],
89                                      include_tvcm_paths=False)
90     loader = resource_loader.ResourceLoader(project)
91     with fs:
92       exc = None
93       try:
94         my_module = loader.load_module(module_name = 'src.my_module')
95         assertFalse('Expected an exception')
96       except module.DepsException, e:
97         exc = e
98       self.assertEquals(
99         ['src.my_module', 'tvcm.foo'],
100         exc.context)
101
102   def testRawScript(self):
103     fs = fake_fs.FakeFS()
104     fs.AddFile('/x/y/z/foo.js', """
105 'use strict';
106     tvcm.requireRawScript('bar.js');
107 """)
108     fs.AddFile('/x/raw/bar.js', 'hello');
109     project = project_module.Project(['/x/y', '/x/raw/'],
110                                      include_tvcm_paths=False)
111     loader = resource_loader.ResourceLoader(project)
112     with fs:
113       my_module = loader.load_module(module_name='z.foo')
114       self.assertEquals(1, len(my_module.dependent_raw_scripts))
115
116       rs = my_module.dependent_raw_scripts[0]
117       self.assertEquals('hello', rs.contents)
118       self.assertEquals('/x/raw/bar.js', rs.filename)
119
120
121   def testModulesThatAreDirectores(self):
122     fs = fake_fs.FakeFS()
123     fs.AddFile('/x/foo/__init__.js', """'use strict'; tvcm.exportTo('foo', function(){});""")
124
125     project = project_module.Project(['/x'], include_tvcm_paths=False)
126     loader = resource_loader.ResourceLoader(project)
127     with fs:
128       foo_module = loader.load_module(module_name = 'foo')
129       self.assertEquals('foo', foo_module.name)
130       self.assertEquals('/x/foo/__init__.js', foo_module.filename)
131
132   def testModulesThatAreDirectoresLoadedWithAbsoluteName(self):
133     fs = fake_fs.FakeFS()
134     fs.AddFile('/x/foo/__init__.js', """'use strict'; tvcm.exportTo('foo', function(){});""")
135
136     project = project_module.Project(['/x'], include_tvcm_paths=False)
137     loader = resource_loader.ResourceLoader(project)
138     with fs:
139       foo_module = loader.load_module(module_filename = '/x/foo/__init__.js')
140       self.assertEquals('foo', foo_module.name)
141       self.assertEquals('/x/foo/__init__.js', foo_module.filename)
142
143   def testExceptionRaisedWhenOldStyleModuleRootExists(self):
144     fs = fake_fs.FakeFS()
145     fs.AddFile('/x/foo/__init__.js', """'use strict';""")
146     fs.AddFile('/x/foo.js', """'use strict';""")
147
148     project = project_module.Project(['/x'], include_tvcm_paths=False)
149     loader = resource_loader.ResourceLoader(project)
150     with fs:
151       self.assertRaises(module.DepsException,
152           lambda: loader.load_module(module_name = 'foo'))
153       self.assertRaises(module.DepsException,
154           lambda: loader.load_module(module_filename = '/x/foo/__init__.js'))