def test_get_webassets_env_from_settings_no_base_url(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {'webassets.base_dir': '/home'}

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings)

        assert str(cm.exception) == "You need to provide webassets.base_url in your configuration"
    def test_get_webassets_env_from_settings_no_base_url(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {'webassets.base_dir': '/home'}

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings)

        assert cm.exception.message == "You need to provide webassets.base_url in your configuration"
    def test_get_webassets_env_from_settings_no_base_dir(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {'webassets.base_url': '/static'}

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings)

        assert cm.exception.message == "You need to provide webassets.base_dir in your configuration"
Example #4
0
    def test_get_webassets_env_from_settings_no_base_dir(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {'webassets.base_url': '/static'}

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings)

        assert str(
            cm.exception
        ) == "You need to provide webassets.base_dir in your configuration"
    def test_get_webassets_env_from_settings_prefix_bad_change(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'foo.base_url': '/static',
            'foo.base_dir': os.getcwd(),
        }

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings, prefix='webassets')

        assert cm.exception.message == "You need to provide webassets.base_dir in your configuration"
    def test_get_webassets_env_from_settings_prefix_bad_change(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'foo.base_url': '/static',
            'foo.base_dir': '/home/sontek',
        }

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings, prefix='webassets')

        assert cm.exception.message == "You need to provide webassets.base_dir in your configuration"
    def test_get_webassets_env_from_settings_prefix_bad_change(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'foo.base_url': 'static',
            'foo.base_dir': os.getcwd(),
        }

        with self.assertRaises(Exception) as cm:
            get_webassets_env_from_settings(settings, prefix='webassets')

        assert str(cm.exception) == "You need to provide webassets.base_dir in your configuration"
Example #8
0
    def test_get_webassets_env_from_settings_paths(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url':
            '/static',
            'webassets.base_dir':
            os.getcwd(),
            'webassets.paths':
            '{"/path/to/scripts": "/js", "/path/to/styles": "/css"}',
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
        self.assertEqual(env.url_mapping, {
            '/path/to/scripts': '/js',
            '/path/to/styles': '/css',
        })
        self.assertEqual(sorted(env.load_path),
                         sorted([
                             '/path/to/styles',
                             '/path/to/scripts',
                         ]))
Example #9
0
 def test_bundles_yamlloader_asset(self):
     try:
         import yaml
     except ImportError:
         raise unittest.SkipTest('PyYAML not installed')
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url':
         '/static',
         'webassets.base_dir':
         os.getcwd(),
         'webassets.bundles': ('dotted.package.name:foo/bar.yaml\n'
                               'dotted.package.name:foo/baz.yaml'),
     }
     self.create_files({
         'dotted/__init__.py':
         '',
         'dotted/package/__init__.py':
         '',
         'dotted/package/name/__init__.py':
         '',
         'dotted/package/name/foo/bar.yaml':
         ('mycss: {contents: style/mycssoverride.css}'),
         'dotted/package/name/foo/baz.yaml':
         ('mycss: {contents: style/mycss.css}\n'
          'myjs: {contents: js/myjs.js}'),
     })
     env = get_webassets_env_from_settings(settings)
     self.assertEqual(env.config.get('bundles'), None)
     self.assertIsNotNone(env['mycss'])
     self.assertEqual(sorted(env._named_bundles.keys()), ['mycss', 'myjs'])
     self.assertIn('style/mycssoverride.css', env['mycss'].contents)
Example #10
0
    def test_get_webassets_env_from_settings_complete(self):
        from pyramid_webassets import get_webassets_env_from_settings
        import webassets

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.debug': 'true',
            'webassets.cache': 'false',
            'webassets.updater': 'always',
            'webassets.jst_compiler': 'Handlebars.compile',
            'webassets.jst_namespace': 'window.Ember.TEMPLATES'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
        assert env.debug is True
        assert isinstance(env.updater, webassets.updater.AlwaysUpdater)
        assert env.config['JST_COMPILER'] == settings['webassets.jst_compiler']
        assert env.config['JST_NAMESPACE'] == settings[
            'webassets.jst_namespace']
        assert env.cache is None
        assert env.auto_build is True
 def test_bundles_yamlloader_asset(self):
     try:
         import yaml
     except ImportError:
         raise unittest.SkipTest('PyYAML not installed')
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': 'static',
         'webassets.base_dir': os.getcwd(),
         'webassets.bundles': (
             'dotted.package.name:foo/bar.yaml\n'
             'dotted.package.name:foo/baz.yaml'
         ),
     }
     self.create_files({
         'dotted/__init__.py': '',
         'dotted/package/__init__.py': '',
         'dotted/package/name/__init__.py': '',
         'dotted/package/name/foo/bar.yaml': (
             'mycss: {contents: style/mycssoverride.css}'
         ),
         'dotted/package/name/foo/baz.yaml': (
             'mycss: {contents: style/mycss.css}\n'
             'myjs: {contents: js/myjs.js}'
         ),
     })
     env = get_webassets_env_from_settings(settings)
     self.assertEqual(env.config.get('bundles'), None)
     self.assertIsNotNone(env['mycss'])
     self.assertEqual(sorted(env._named_bundles.keys()), ['mycss', 'myjs'])
     self.assertIn('style/mycssoverride.css', env['mycss'].contents)
 def test_auto_bool(self):
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': 'static',
         'webassets.base_dir': os.getcwd(),
         'webassets.less_run_in_debug': 'true',
     }
     env = get_webassets_env_from_settings(settings)
     assert env.config['less_run_in_debug'] is True
 def test_auto_json(self):
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': 'static',
         'webassets.base_dir': os.getcwd(),
         'webassets.less_extra_args': 'json:["--foo", "--bar"]',
     }
     env = get_webassets_env_from_settings(settings)
     assert env.config['less_extra_args'] == ['--foo', '--bar']
Example #14
0
 def test_auto_bool(self):
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': '/static',
         'webassets.base_dir': os.getcwd(),
         'webassets.less_run_in_debug': 'true',
     }
     env = get_webassets_env_from_settings(settings)
     assert env.config['less_run_in_debug'] is True
Example #15
0
 def test_auto_json(self):
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': '/static',
         'webassets.base_dir': os.getcwd(),
         'webassets.less_extra_args': 'json:["--foo", "--bar"]',
     }
     env = get_webassets_env_from_settings(settings)
     assert env.config['less_extra_args'] == ['--foo', '--bar']
    def test_get_webassets_env_from_settings_minimal(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
Example #17
0
    def test_get_webassets_env_from_settings_with_cache(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': '/home/sontek',
            'webassets.cache': 'true',
        }

        env = get_webassets_env_from_settings(settings)

        assert env.cache != None
Example #18
0
    def test_get_webassets_env_from_settings_load_path(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.load_path': '/foo bar/\nbaz'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.load_path == ['/foo', 'bar/', 'baz']
    def test_get_webassets_env_from_settings_minimal(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
    def test_get_webassets_env_from_settings_with_cache(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': '/home/sontek',
            'webassets.cache': 'true',
        }

        env = get_webassets_env_from_settings(settings)

        assert env.cache != None
Example #21
0
    def test_get_webassets_env_from_settings_with_cache(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.cache': 'true',
        }

        env = get_webassets_env_from_settings(settings)

        assert env.cache is not None
    def test_get_webassets_env_from_settings_load_path(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.load_path': '/foo bar/\nbaz'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.load_path == ['/foo', 'bar/', 'baz']
    def test_get_webassets_env_from_settings_with_cache(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.cache': 'true',
        }

        env = get_webassets_env_from_settings(settings)

        assert env.cache is not None
    def test_get_webassets_env_from_settings_asset_spec_dir(self):
        import pyramid_webassets
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': 'pyramid_webassets:static',
        }

        env = get_webassets_env_from_settings(settings)
        expected = os.path.join(pyramid_webassets.__path__[0], 'static')

        assert env.directory == expected
    def test_get_webassets_env_from_settings_prefix_change(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'foo.base_url': '/static',
            'foo.base_dir': '/home/sontek',
        }

        env = get_webassets_env_from_settings(settings, prefix='foo')

        assert env != None
        assert env.directory == settings['foo.base_dir']
        assert env.url == settings['foo.base_url']
Example #26
0
    def test_get_webassets_env_from_settings_asset_spec_dir(self):
        import pyramid_webassets
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': 'pyramid_webassets:static',
        }

        env = get_webassets_env_from_settings(settings)
        expected = os.path.join(pyramid_webassets.__path__[0], 'static')

        assert env.directory == expected
    def test_get_webassets_env_from_settings_dir_with_colon(self):
        import pyramid_webassets
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': 'here:static',
        }

        env = get_webassets_env_from_settings(settings)
        expected = os.path.abspath('here:static')

        assert env.directory == expected
    def test_webassets_static_view_setting(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.static_view': True,
        }

        env = get_webassets_env_from_settings(settings)

        assert env is not None
        assert env.config['static_view'] == settings['webassets.static_view']
    def test_get_webassets_env_from_settings_prefix_change(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'foo.base_url': 'static',
            'foo.base_dir': os.getcwd(),
        }

        env = get_webassets_env_from_settings(settings, prefix='foo')

        assert env is not None
        assert env.directory == settings['foo.base_dir']
        assert env.url == '/' + settings['foo.base_url']
Example #30
0
    def test_get_webassets_env_from_settings_prefix_change(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'foo.base_url': '/static',
            'foo.base_dir': os.getcwd(),
        }

        env = get_webassets_env_from_settings(settings, prefix='foo')

        assert env is not None
        assert env.directory == settings['foo.base_dir']
        assert env.url == settings['foo.base_url']
Example #31
0
    def test_webassets_static_view_setting(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.static_view': True,
        }

        env = get_webassets_env_from_settings(settings)

        assert env is not None
        assert env.config['static_view'] == settings['webassets.static_view']
Example #32
0
    def test_get_webassets_env_from_settings_dir_with_colon(self):
        import pyramid_webassets
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': 'here:static',
        }

        env = get_webassets_env_from_settings(settings)
        expected = os.path.abspath('here:static')

        assert env.directory == expected
Example #33
0
    def test_get_webassets_env_from_settings_autobuild_disabled(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.auto_build': 'false'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
        assert env.auto_build is False
Example #34
0
def main(argv=sys.argv):
    if len(argv) != 2:
        usage(argv)

    config_uri = argv[1]

    setup_logging(config_uri)
    settings = get_appsettings(config_uri)

    env = get_webassets_env_from_settings(settings)

    for name, bundle in assets:
        print("Building asset {0}".format(name))
        bundle.build(env)
    def test_get_webassets_env_from_settings_minimal(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == '/' + settings['webassets.base_url']
        self.assertEqual(env.url_mapping, {})
        self.assertEqual(env.load_path, [])
    def test_get_webassets_env_from_settings_autobuild_disabled(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.auto_build': 'false'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == '/' + settings['webassets.base_url']
        assert env.auto_build is False
    def test_get_webassets_env_from_settings_minimal(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == '/' + settings['webassets.base_url']
        self.assertEqual(env.url_mapping, {})
        self.assertEqual(env.load_path, [])
    def test_get_webassets_env_from_settings_autobuild_disabled(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': '/home/sontek',
            'webassets.auto_build': 'false'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
        assert env.auto_build == False
    def test_webassets_static_view_cache_control_setting(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.static_view': True,
            'webassets.cache_max_age': 3600,
        }

        env = get_webassets_env_from_settings(settings)

        assert env is not None
        assert env.config['static_view'] == settings['webassets.static_view']
        assert env.config['cache_max_age'] == settings['webassets.cache_max_age']
    def test_webassets_static_view_cache_control_setting(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.static_view': True,
            'webassets.cache_max_age': 3600,
        }

        env = get_webassets_env_from_settings(settings)

        assert env != None
        assert env.config['static_view'] == settings['webassets.static_view']
        assert env.config['cache_max_age'] == settings['webassets.cache_max_age']
 def test_bundles_yamlloader_file(self):
     try:
         import yaml
     except ImportError:
         raise unittest.SkipTest('PyYAML not installed')
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': 'static',
         'webassets.base_dir': os.getcwd(),
         'webassets.bundles': self.tempdir + '/foo/bar.yaml',
     }
     self.create_files({'foo/bar.yaml': 'mycss: {contents: style/mycss.css}'})
     env = get_webassets_env_from_settings(settings)
     self.assertEqual(env.config.get('bundles'), None)
     self.assertIsNotNone(env['mycss'])
     self.assertEqual(list(env._named_bundles.keys()), ['mycss'])
Example #42
0
 def test_bundles_yamlloader_file(self):
     try:
         import yaml
     except ImportError:
         raise unittest.SkipTest('PyYAML not installed')
     from pyramid_webassets import get_webassets_env_from_settings
     settings = {
         'webassets.base_url': '/static',
         'webassets.base_dir': os.getcwd(),
         'webassets.bundles': self.tempdir + '/foo/bar.yaml',
     }
     self.create_files({'foo/bar.yaml': 'mycss: {contents: style/mycss.css}'})
     env = get_webassets_env_from_settings(settings)
     self.assertEqual(env.config.get('bundles'), None)
     self.assertIsNotNone(env['mycss'])
     self.assertEqual(env._named_bundles.keys(), ['mycss'])
    def test_get_webassets_env_from_settings_paths_null_url(self):
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.paths': '{"/path/to/scripts": null, "/path/to/styles": "/css"}',
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == '/' + settings['webassets.base_url']
        self.assertEqual(env.url_mapping, {
            '/path/to/styles':  '/css',
            })
        self.assertEqual(sorted(env.load_path), sorted([
            '/path/to/styles',
            '/path/to/scripts',
            ]))
    def test_get_webassets_env_from_settings_complete(self):
        from pyramid_webassets import get_webassets_env_from_settings
        import webassets

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': '/home/sontek',
            'webassets.debug': 'true',
            'webassets.cache': 'false',
            'webassets.updater': 'always',
            'webassets.jst_compiler': 'Handlebars.compile'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
        assert env.debug == True
        assert isinstance(env.updater, webassets.updater.AlwaysUpdater)
        assert env.config['JST_COMPILER'] == settings['webassets.jst_compiler']
        assert env.cache == None
Example #45
0
    def test_get_webassets_env_from_settings_complete(self):
        from pyramid_webassets import get_webassets_env_from_settings
        import webassets

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': '/home/sontek',
            'webassets.debug': 'true',
            'webassets.cache': 'false',
            'webassets.updater': 'always',
            'webassets.jst_compiler': 'Handlebars.compile'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == settings['webassets.base_url']
        assert env.debug == True
        assert isinstance(env.updater, webassets.updater.AlwaysUpdater)
        assert env.config['JST_COMPILER'] == settings['webassets.jst_compiler']
        assert env.cache == None
Example #46
0
    def test_get_webassets_env_from_settings_with_cache_directory(self):
        from pyramid_webassets import get_webassets_env_from_settings
        from uuid import uuid4
        import shutil

        tmpdir = os.path.join(os.getcwd(), 'test-cache-dir-' + str(uuid4()))

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.cache': tmpdir,
        }

        assert not os.path.isdir(tmpdir)

        env = get_webassets_env_from_settings(settings)

        assert env.cache is not None
        assert env.cache == tmpdir
        assert os.path.isdir(tmpdir)

        shutil.rmtree(tmpdir)
    def test_get_webassets_env_from_settings_with_cache_directory(self):
        from pyramid_webassets import get_webassets_env_from_settings
        from uuid import uuid4
        import shutil

        tmpdir = os.path.join(os.getcwd(), 'test-cache-dir-' + str(uuid4()))

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.cache': tmpdir,
        }

        assert not os.path.isdir(tmpdir)

        env = get_webassets_env_from_settings(settings)

        assert env.cache is not None
        assert env.cache == tmpdir
        assert os.path.isdir(tmpdir)

        shutil.rmtree(tmpdir)
    def test_get_webassets_env_from_settings_complete(self):
        from pyramid_webassets import get_webassets_env_from_settings
        import webassets

        settings = {
            'webassets.base_url': 'static',
            'webassets.base_dir': os.getcwd(),
            'webassets.debug': 'true',
            'webassets.cache': 'false',
            'webassets.updater': 'always',
            'webassets.jst_compiler': 'Handlebars.compile',
            'webassets.jst_namespace': 'window.Ember.TEMPLATES'
        }

        env = get_webassets_env_from_settings(settings)

        assert env.directory == settings['webassets.base_dir']
        assert env.url == '/' + settings['webassets.base_url']
        assert env.debug is True
        assert isinstance(env.updater, webassets.updater.AlwaysUpdater)
        assert env.config['JST_COMPILER'] == settings['webassets.jst_compiler']
        assert env.config['JST_NAMESPACE'] == settings['webassets.jst_namespace']
        assert env.cache is None
        assert env.auto_build is True
    def test_webassets_source_url_versions(self):
        import md5
        from pyramid_webassets import get_webassets_env_from_settings

        settings = {
            'webassets.base_url': '/static',
            'webassets.base_dir': os.getcwd(),
            'webassets.static_view': True,
            'webassets.cache_max_age': 3600,
        }

        env = get_webassets_env_from_settings(settings)
        env.append_path(os.getcwd(), 'http://static.example.com')

        version = md5.md5(open(__file__).read()).hexdigest()[:8]

        path = 'pyramid_webassets/tests/test_webassets.py'
        spec = 'pyramid_webassets:tests/test_webassets.py'
        expected = 'http://static.example.com/%s?%s' % (path, version)

        assert (
            env.resolver.resolve_source_to_url(os.path.abspath(path), spec) ==
            expected
        )