예제 #1
0
    def testImages(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/src/foo/x.css', """
.x .y {
    background-image: url(../images/bar.jpeg);
}
""")
        fs.AddFile('/src/images/bar.jpeg', 'hello world')
        with fs:
            project = project_module.Project([os.path.normpath('/src/')])
            loader = resource_loader.ResourceLoader(project)

            foo_x = loader.LoadStyleSheet('foo.x')
            self.assertEquals(1, len(foo_x.images))

            r0 = foo_x.images[0]
            self.assertEquals(os.path.normpath('/src/images/bar.jpeg'),
                              r0.absolute_path)

            inlined = foo_x.contents_with_inlined_images
            self.assertEquals(
                """
.x .y {
    background-image: url(data:image/jpeg;base64,%s);
}
""" % base64.standard_b64encode('hello world'), inlined)
예제 #2
0
def load_tests(loader, tests, pattern):
    tvcm_project = project_module.Project()
    suite = unittest.TestSuite()
    suite.addTest(
        module_test_case.DiscoverTestsInModule(tvcm_project,
                                               tvcm_project.tvcm_path))
    return suite
예제 #3
0
    def setUp(self):
        self.fs = fake_fs.FakeFS()
        self.fs.AddFile('/x/tvcm/__init__.js', """
'use strict';
/* ohai */
    """)
        self.fs.AddFile(
            '/x/foo/my_module.js', """
'use strict';
tvcm.require('foo.other_module');
tvcm.exportTo('foo', function() {
});
""")
        self.fs.AddFile(
            '/x/foo/other_module.js', """
'use strict';
tvcm.requireRawScript('foo/raw/raw_script.js');
    tvcm.exportTo('foo', function() {
    HelloWorld();
});
""")
        self.fs.AddFile('/x/foo/raw/raw_script.js', """
/* raw script */
""")
        self.project = project_module.Project(['/x'], include_tvcm_paths=False)
예제 #4
0
    def testPolymerConversion2(self):
        file_contents = {}
        file_contents['/tmp/a/b/my_component.html'] = """
<!DOCTYPE html>
<polymer-element name="my-component">
  <template>
  </template>
  <script>
    'use strict';
    Polymer ( );
  </script>
</polymer-element>
"""
        with fake_fs.FakeFS(file_contents):
            project = project_module.Project(['/tvcm/', '/tmp/'],
                                             include_tvcm_paths=False)
            loader = resource_loader.ResourceLoader(project)
            my_component = loader.LoadModule(module_name='a.b.my_component')

            f = StringIO.StringIO()
            my_component.AppendJSContentsToFile(
                f,
                use_include_tags_for_scripts=False,
                dir_for_include_tag_root=None)
            js = f.getvalue().rstrip()
            expected_js = """
    'use strict';
    Polymer ( 'my-component');
""".rstrip()
            self.assertEquals(expected_js, js)
예제 #5
0
    def __init__(self, port, quiet=False, project=None):
        BaseHTTPServer.HTTPServer.__init__(self, ('', port), DevServerHandler)
        self._quiet = quiet
        if port == 0:
            port = self.server_address[1]
        self._port = port
        self._path_handlers = []
        self._test_links = []
        if project:
            self._project = project
        else:
            self._project = project_module.Project([])

        self._next_reload_check = -1
        self.test_module_resource_filter = None

        self.AddPathHandler('/', do_GET_root)
        self.AddPathHandler('', do_GET_root)
        self.default_path = '/base/tests.html'
        # Redirect old tests.html places to the new location until folks have gotten used to its new
        # location.
        self.AddPathHandler('/tvcm/tests.html', do_GET_root)
        self.AddPathHandler('/tests.html', do_GET_root)

        self.AddPathHandler('/tv/json/tests', do_GET_json_tests)
예제 #6
0
    def testInlineStylesheetURLs(self):
        file_contents = {}
        file_contents['/tmp/a/b/my_component.html'] = """
<!DOCTYPE html>
<style>
.some-rule {
    background-image: url('../something.jpg');
}
</style>
"""
        file_contents['/tmp/a/something.jpg'] = 'jpgdata'
        with fake_fs.FakeFS(file_contents):
            project = project_module.Project(['/tvcm/', '/tmp/'],
                                             include_tvcm_paths=False)
            loader = resource_loader.ResourceLoader(project)
            my_component = loader.LoadModule(module_name='a.b.my_component')

            computed_deps = []
            my_component.AppendDirectlyDependentFilenamesTo(computed_deps)
            self.assertEquals(
                set(computed_deps),
                set(['/tmp/a/b/my_component.html', '/tmp/a/something.jpg']))

            f = StringIO.StringIO()
            ctl = html_generation_controller.HTMLGenerationController()
            my_component.AppendHTMLContentsToFile(f, ctl)
            html = f.getvalue().rstrip()
            expected_html = """
.some-rule {
    background-image: url(data:image/jpg;base64,anBnZGF0YQ==);
}
""".rstrip()
            print html
예제 #7
0
    def testDepsExceptionContext(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/x/src/my_module.js', """
'use strict';
tvcm.require('tvcm.foo');
tvcm.exportTo('foo', function() {
});
""")
        fs.AddFile(
            '/x/tvcm/foo.js', """
'use strict';
tvcm.require('missing');
tvcm.exportTo('foo', function() {
});
""")
        fs.AddFile('/x/tvcm/__init__.js', '/* nothing */')
        project = project_module.Project(['/x'], include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            exc = None
            try:
                my_module = loader.LoadModule(module_name='src.my_module')
                assertFalse('Expected an exception')
            except module.DepsException, e:
                exc = e
            self.assertEquals(['src.my_module', 'tvcm.foo'], exc.context)
예제 #8
0
    def setUp(self):
        self.fs = fake_fs.FakeFS()
        self.fs.AddFile(
            '/x/foo/my_module.html', """
<!DOCTYPE html>
<link rel="import" href="/foo/other_module.html">
""")
        self.fs.AddFile(
            '/x/foo/other_module.html', """
<!DOCTYPE html>
<script src="/foo/raw/raw_script.js"></script>
<script>
    'use strict';
    HelloWorld();
</script>
""")
        self.fs.AddFile('/x/foo/raw/raw_script.js', """
/* raw script */
""")
        self.fs.AddFile('/x/platform.min.js', """
""")
        self.fs.AddFile('/x/polymer.min.js', """
""")

        self.project = project_module.Project(['/x'], include_tvcm_paths=False)
예제 #9
0
    def testGetAllDependentFilenamesRecursive(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/x/y/z/foo.html', """
<!DOCTYPE html>
<link rel="import" href="/z/foo2.html">
<link rel="stylesheet" href="/z/foo.css">
<script src="/bar.js"></script>
""")
        fs.AddFile('/x/y/z/foo.css', """
.x .y {
    background-image: url(foo.jpeg);
}
""")
        fs.AddFile('/x/y/z/foo.jpeg', '')
        fs.AddFile('/x/y/z/foo2.html', """
<!DOCTYPE html>
""")
        fs.AddFile('/x/raw/bar.js', 'hello')
        project = project_module.Project(['/x/y', '/x/raw/'],
                                         include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            my_module = loader.LoadModule(module_name='z.foo')
            self.assertEquals(1, len(my_module.dependent_raw_scripts))

            dependent_filenames = my_module.GetAllDependentFilenamesRecursive()
            self.assertEquals([
                '/x/y/z/foo.html', '/x/raw/bar.js', '/x/y/z/foo.css',
                '/x/y/z/foo.jpeg', '/x/y/z/foo2.html'
            ], dependent_filenames)
예제 #10
0
 def test_basic(self):
   tvcm_project = project_module.Project()
   loader = resource_loader.ResourceLoader(tvcm_project)
   guid_module = loader.LoadModule(module_name='tvcm')
   self.assertTrue(os.path.samefile(
       guid_module.filename,
       os.path.join(tvcm_project.tvcm_src_path, 'tvcm', '__init__.js')))
   expected_contents = ''
   with open(os.path.join(tvcm_project.tvcm_src_path, 'tvcm', '__init__.js')) as f:
     expected_contents = f.read()
   self.assertEquals(guid_module.contents, expected_contents)
예제 #11
0
    def testImportsCauseFailure(self):
        fs = fake_fs.FakeFS()
        fs.AddFile('/src/foo/x.css', """
@import url(awesome.css);
""")
        with fs:
            project = project_module.Project([os.path.normpath('/src')])
            loader = resource_loader.ResourceLoader(project)

            self.assertRaises(Exception,
                              lambda: loader.LoadStyleSheet('foo.x'))
예제 #12
0
    def testModulesThatAreDirectores(self):
        fs = fake_fs.FakeFS()
        fs.AddFile('/x/foo/__init__.js',
                   """'use strict'; tvcm.exportTo('foo', function(){});""")
        fs.AddFile('/x/tvcm/__init__.js', '/* nothing */')

        project = project_module.Project(['/x'], include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            foo_module = loader.LoadModule(module_name='foo')
            self.assertEquals('foo', foo_module.name)
            self.assertEquals('/x/foo/__init__.js', foo_module.filename)
예제 #13
0
    def testExceptionRaisedWhenOldStyleModuleRootExists(self):
        fs = fake_fs.FakeFS()
        fs.AddFile('/x/foo/__init__.js', """'use strict';""")
        fs.AddFile('/x/foo.js', """'use strict';""")

        project = project_module.Project(['/x'], include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            self.assertRaises(module.DepsException,
                              lambda: loader.LoadModule(module_name='foo'))
            self.assertRaises(
                module.DepsException, lambda: loader.LoadModule(
                    module_filename='/x/foo/__init__.js'))
예제 #14
0
    def testURLResolveFails(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/src/foo/x.css', """
.x .y {
    background-image: url(../images/missing.jpeg);
}
""")
        with fs:
            project = project_module.Project([os.path.normpath('/src')])
            loader = resource_loader.ResourceLoader(project)

            self.assertRaises(module.DepsException,
                              lambda: loader.LoadStyleSheet('foo.x'))
예제 #15
0
def Main(paths_to_lint):
    project = project_module.Project()
    new_paths = [
        os.path.abspath(
            os.path.join(project.tvcm_third_party_path, 'python_gflags')),
        os.path.abspath(
            os.path.join(project.tvcm_third_party_path, 'closure_linter'))
    ]
    sys.path += new_paths
    try:
        _MainImpl(paths_to_lint)
    finally:
        for p in new_paths:
            sys.path.remove(p)
    def testDiscoverAndRun(self):
        if test_runner.PY_ONLY_TESTS:
            return
        tvcm_project = project_module.Project()
        t = module_test_case.DiscoverTestsInModule(tvcm_project,
                                                   tvcm_project.tvcm_path)
        interesting_t = test_runner.FilterSuite(
            t, lambda x: x.id() ==
            'tvcm.unittest.test_case_test.parseFullyQualifiedName')

        # This test has to manualy call the run and setUp/tearDown methods
        # so that the Python unittest system doesn't suppress the failures.
        interesting_t.setUp()
        try:
            case = list(interesting_t)[0]
            assert case.id(
            ) == 'tvcm.unittest.test_case_test.parseFullyQualifiedName'
            case.runTest()
예제 #17
0
    def testRawScript(self):
        fs = fake_fs.FakeFS()
        fs.AddFile('/x/y/z/foo.js', """
'use strict';
    tvcm.requireRawScript('bar.js');
""")
        fs.AddFile('/x/raw/bar.js', 'hello')
        fs.AddFile('/x/y/tvcm/__init__.js', '/* nothing */')
        project = project_module.Project(['/x/y', '/x/raw/'],
                                         include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            my_module = loader.LoadModule(module_name='z.foo')
            self.assertEquals(1, len(my_module.dependent_raw_scripts))

            rs = my_module.dependent_raw_scripts[0]
            self.assertEquals('hello', rs.contents)
            self.assertEquals('/x/raw/bar.js', rs.filename)
예제 #18
0
    def testBasic(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/x/src/my_module.html', """
<!DOCTYPE html>
<link rel="import" href="/tvcm/foo.html">
});
""")
        fs.AddFile('/x/tvcm/foo.html', """
<!DOCTYPE html>
});
""")
        project = project_module.Project(['/x'], include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            my_module = loader.LoadModule(module_name='src.my_module')
            dep_names = [x.name for x in my_module.dependent_modules]
            self.assertEquals(['tvcm.foo'], dep_names)
예제 #19
0
    def test_module(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/src/x.js', """
'use strict';
tvcm.require('y');
tvcm.require('z');
tvcm.exportTo('xyz', function() { });
""")
        fs.AddFile(
            '/src/y.js', """
'use strict';
tvcm.require('z');
tvcm.exportTo('xyz', function() { });
""")
        fs.AddFile(
            '/src/z.js', """
'use strict';
tvcm.exportTo('xyz', function() { });
""")
        fs.AddFile('/src/tvcm/__init__.js', '/* nothing */')
        with fs:
            project = project_module.Project(['/src/'],
                                             include_tvcm_paths=False)
            loader = resource_loader.ResourceLoader(project)
            x_module = loader.LoadModule('x')

            self.assertEquals([
                loader.loaded_modules['tvcm'], loader.loaded_modules['y'],
                loader.loaded_modules['z']
            ], x_module.dependent_modules)

            already_loaded_set = set()
            load_sequence = []
            x_module.ComputeLoadSequenceRecursive(load_sequence,
                                                  already_loaded_set)

            self.assertEquals([
                loader.loaded_modules['tvcm'], loader.loaded_modules['z'],
                loader.loaded_modules['y'], x_module
            ], load_sequence)
예제 #20
0
    def __init__(self, port, quiet=False, project=None):
        BaseHTTPServer.HTTPServer.__init__(self, ('localhost', port),
                                           DevServerHandler)
        self._shutdown_request = None
        self._quiet = quiet
        if port == 0:
            port = self.server_address[1]
        self._port = port
        self._path_handlers = []
        if project:
            self._project = project
        else:
            self._project = project_module.Project([])

        self.AddPathHandler('/', do_GET_root)
        self.AddPathHandler('', do_GET_root)
        self.default_path = '/base/tests.html'
        # Redirect old tests.html places to the new location until folks have
        # gotten used to its new location.
        self.AddPathHandler('/tvcm/tests.html', do_GET_root)
        self.AddPathHandler('/tests.html', do_GET_root)
예제 #21
0
    def testDepsExceptionContext(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/x/src/my_module.html', """
<!DOCTYPE html>
<link rel="import" href="/tvcm/foo.html">
""")
        fs.AddFile(
            '/x/tvcm/foo.html', """
<!DOCTYPE html>
<link rel="import" href="missing.html">
""")
        project = project_module.Project(['/x'], include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            exc = None
            try:
                my_module = loader.LoadModule(module_name='src.my_module')
                assertFalse('Expected an exception')
            except module.DepsException, e:
                exc = e
            self.assertEquals(['src.my_module', 'tvcm.foo'], exc.context)
예제 #22
0
    def test_module(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/src/x.html', """
<!DOCTYPE html>
<link rel="import" href="/y.html">
<link rel="import" href="/z.html">
<script>
'use strict';
</script>
""")
        fs.AddFile('/src/y.html', """
<!DOCTYPE html>
<link rel="import" href="/z.html">
""")
        fs.AddFile('/src/z.html', """
<!DOCTYPE html>
""")
        fs.AddFile('/src/tvcm.html', '<!DOCTYPE html>')
        with fs:
            project = project_module.Project(['/src/'],
                                             include_tvcm_paths=False)
            loader = resource_loader.ResourceLoader(project)
            x_module = loader.LoadModule('x')

            self.assertEquals(
                [loader.loaded_modules['y'], loader.loaded_modules['z']],
                x_module.dependent_modules)

            already_loaded_set = set()
            load_sequence = []
            x_module.ComputeLoadSequenceRecursive(load_sequence,
                                                  already_loaded_set)

            self.assertEquals([
                loader.loaded_modules['z'], loader.loaded_modules['y'],
                x_module
            ], load_sequence)
예제 #23
0
    def testBasic(self):
        fs = fake_fs.FakeFS()
        fs.AddFile(
            '/x/src/my_module.js', """
'use strict';
tvcm.require('tvcm.foo');
tvcm.exportTo('foo', function() {
});
""")
        fs.AddFile(
            '/x/tvcm/foo.js', """
'use strict';
tvcm.require('tvcm.foo');
tvcm.exportTo('foo', function() {
});
""")
        fs.AddFile('/x/tvcm/__init__.js', '/* nothing */')
        project = project_module.Project(['/x'], include_tvcm_paths=False)
        loader = resource_loader.ResourceLoader(project)
        with fs:
            my_module = loader.LoadModule(module_name='src.my_module')
            dep_names = [x.name for x in my_module.dependent_modules]
            self.assertEquals(['tvcm', 'tvcm.foo'], dep_names)
예제 #24
0
    def setUp(self):
        self.fs = fake_fs.FakeFS()
        self.fs.AddFile(
            '/x/foo/my_module.html', """
<!DOCTYPE html>
<link rel="import" href="/foo/other_module.html">
""")
        self.fs.AddFile(
            '/x/foo/other_module.html', """
<!DOCTYPE html>
<script src="/foo/raw/raw_script.js"></script>
<script>
    'use strict';
    HelloWorld();
</script>
""")
        self.fs.AddFile('/x/foo/raw/raw_script.js', """
/* raw script */
""")
        self.fs.AddFile('/x/components/polymer/polymer.js', """
""")

        self.project = project_module.Project(['/x'])
예제 #25
0
 def testBasic(self):
     project = project_module.Project()
     resp_str = self.server.Get('/tvcm.html')
     with open(os.path.join(project.tvcm_src_path, 'tvcm.html'), 'r') as f:
         tvcm_str = f.read()
     self.assertEquals(resp_str, tvcm_str)
예제 #26
0
    def testBasic(self):
        file_contents = {}
        file_contents['/tmp/a/b/start.html'] = """
<!DOCTYPE html>
<link rel="import" href="/widget.html">
<link rel="stylesheet" href="../common.css">
<script src="/raw_script.js"></script>
<polymer-element name="start">
  <template>
  </template>
  <script>
    'use strict';
    console.log('inline script for start.html got written');
  </script>
</polymer-element>
"""
        file_contents['/tvcm/tvcm.html'] = """<!DOCTYPE html>
"""
        file_contents['/components/widget.html'] = """
<!DOCTYPE html>
<link rel="import" href="/tvcm.html">
<widget name="widget.html"></widget>
<script>
'use strict';
console.log('inline script for widget.html');
</script>
"""
        file_contents['/tmp/a/common.css'] = """
/* /tmp/a/common.css was written */
"""
        file_contents['/raw/raw_script.js'] = """
console.log('/raw/raw_script.js was written');
"""
        file_contents['/raw/platform.min.js'] = """
"""
        file_contents['/raw/polymer.min.js'] = """
"""

        with fake_fs.FakeFS(file_contents):
            project = project_module.Project(
                ['/tvcm/', '/tmp/', '/components/', '/raw/'],
                include_tvcm_paths=False)
            loader = resource_loader.ResourceLoader(project)
            a_b_start_module = loader.LoadModule(module_name='a.b.start')
            load_sequence = project.CalcLoadSequenceForModules(
                [a_b_start_module])

            # Check load sequence names.
            load_sequence_names = [x.name for x in load_sequence]
            self.assertEquals(['tvcm', 'widget', 'a.b.start'],
                              load_sequence_names)

            # Check module_deps on a_b_start_module
            def HasDependentModule(module, name):
                return [x for x in module.dependent_modules if x.name == name]

            assert HasDependentModule(a_b_start_module, 'widget')

            # Check JS generation.
            js = generate.GenerateJS(load_sequence)
            assert 'inline script for start.html' in js
            assert 'inline script for widget.html' in js
            assert '/raw/raw_script.js' in js

            # Check HTML generation.
            html = generate.GenerateStandaloneHTMLAsString(
                load_sequence, title='', flattened_js_url="/blah.js")
            assert '<polymer-element name="start">' in html
            assert 'inline script for widget.html' not in html
            assert 'common.css' in html
예제 #27
0
 def CreateVulcanizer(self):
     from tvcm import project as project_module
     return project_module.Project(self.source_paths)