def test_legacy_resources(): r = resources.Resources(minified=True, legacy=True) assert [basename(f) for f in r._file_paths("js")] == [ "bokeh.legacy.min.js", "bokeh-widgets.legacy.min.js", "bokeh-tables.legacy.min.js", ] r = resources.Resources(minified=True, legacy=False) assert [basename(f) for f in r._file_paths("js")] == [ "bokeh.min.js", "bokeh-widgets.min.js", "bokeh-tables.min.js", ] r = resources.Resources(minified=False, legacy=True) assert [basename(f) for f in r._file_paths("js")] == [ "bokeh.legacy.js", "bokeh-widgets.legacy.js", "bokeh-tables.legacy.js", ] r = resources.Resources(minified=False, legacy=False) assert [basename(f) for f in r._file_paths("js")] == [ "bokeh.js", "bokeh-widgets.js", "bokeh-tables.js", ]
def test_js_wrapper(self): for mode in ("inline", "server", "cdn", "relative", "absolute"): r = resources.Resources(mode) self.assertEqual(r.js_wrapper("foo"), WRAPPER) for mode in ("server-dev", "relative-dev", "absolute-dev"): r = resources.Resources(mode) self.assertEqual(r.js_wrapper("foo"), WRAPPER_DEV)
def test_server_dev(self): r = resources.Resources(mode="server-dev") self.assertEqual(r.mode, "server") self.assertEqual(r.dev, True) self.assertEqual(len(r.js_raw), 1) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, []) r = resources.Resources(mode="server-dev", root_url="http://foo/") self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_server(self): r = resources.Resources(mode="server") self.assertEqual(r.mode, "server") self.assertEqual(r.dev, False) self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, []) r = resources.Resources(mode="server", root_url="http://foo/") self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_server_dev(self) -> None: r = resources.Resources(mode="server-dev") assert r.mode == "server" assert r.dev == True assert len(r.js_raw) == 2 assert r.css_raw == [] assert r.messages == [] r = resources.Resources(mode="server-dev", root_url="http://foo/") assert r.js_raw == [DEFAULT_LOG_JS_RAW, "Bokeh.settings.dev = true"] assert r.css_raw == [] assert r.messages == []
def test_argument_checks(self): with pytest.raises(ValueError): resources.Resources("foo") for mode in ("inline", "cdn", "server", "server-dev", "absolute", "absolute-dev"): with pytest.raises(ValueError): resources.Resources(mode, root_dir="foo") for mode in ("inline", "server", "server-dev", "relative", "relative-dev", "absolute", "absolute-dev"): with pytest.raises(ValueError): resources.Resources(mode, version="foo") for mode in ("inline", "cdn", "relative", "relative-dev", "absolute", "absolute-dev"): with pytest.raises(ValueError): resources.Resources(mode, root_url="foo")
def test_cdn(self): resources.__version__ = "1.0" r = resources.Resources(mode="cdn", version="1.0") self.assertEqual(r.mode, "cdn") self.assertEqual(r.dev, False) self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, []) resources.__version__ = "1.0-1-abc" r = resources.Resources(mode="cdn", version="1.0") self.assertEqual(r.messages, [ {'text': "Requesting CDN BokehJS version '1.0' from Bokeh development version '1.0-1-abc'. This configuration is unsupported and may not work!", 'type': 'warn'} ])
def test_cdn(self): resources.__version__ = "1.0" r = resources.Resources(mode="cdn", version="1.0") assert r.mode == "cdn" assert r.dev == False assert r.js_raw == [DEFAULT_LOG_JS_RAW] assert r.css_raw == [] assert r.messages == [] resources.__version__ = "1.0-1-abc" r = resources.Resources(mode="cdn", version="1.0") assert r.messages == [{ 'text': "Requesting CDN BokehJS version '1.0' from Bokeh development version '1.0-1-abc'. This configuration is unsupported and may not work!", 'type': 'warn'} ]
def test_external_js_and_css_resource_embedding() -> None: """ This test method has to be at the end of the test modules because subclassing a Model causes the CustomModel to be added as a Model and messes up the Resources state for the other tests. """ # External resources can be defined as a string or list of strings class CustomModel1(Model): __javascript__ = "external_js_1" __css__ = "external_css_1" class CustomModel2(Model): __javascript__ = ["external_js_2", "external_js_3"] __css__ = ["external_css_2", "external_css_3"] class CustomModel3(Model): __javascript__ = ["external_js_1", "external_js_3"] __css__ = ["external_css_1", "external_css_2"] r = resources.Resources() assert "external_js_1" in r.js_files assert "external_css_1" in r.css_files assert "external_js_2" in r.js_files assert "external_js_3" in r.js_files assert "external_css_2" in r.css_files assert "external_css_3" in r.css_files # Deduplication should keep the first instance of every file assert r.css_files.count("external_css_1") == 1 assert r.css_files.count("external_css_2") == 1 assert r.js_files.count("external_js_3") == 1 assert r.js_files.count("external_js_1") == 1
def test_relative(self): r = resources.Resources(mode="relative") self.assertEqual(r.mode, "relative") self.assertEqual(r.dev, False) self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_log_level(self): r = resources.Resources() for level in LOG_LEVELS: r.log_level = level self.assertEqual(r.log_level, level) if not r.dev: self.assertEqual(r.js_raw[-1], 'Bokeh.set_log_level("%s");' % level) self.assertRaises(ValueError, setattr, r, "log_level", "foo")
def test_relative_dev(self): r = resources.Resources(mode="relative-dev") self.assertEqual(r.mode, "relative") self.assertEqual(r.dev, True) self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW, "Bokeh.settings.dev = true"]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_absolute(self): r = resources.Resources(mode="absolute") self.assertEqual(r.mode, "absolute") self.assertEqual(r.dev, False) self.assertEqual(r.js_raw, [DEFAULT_JOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_absolute_dev(self): r = resources.Resources(mode="absolute-dev") self.assertEqual(r.mode, "absolute") self.assertEqual(r.dev, True) self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_relative_dev(self): r = resources.Resources(mode="relative-dev") self.assertEqual(r.mode, "relative") self.assertEqual(r.dev, True) self.assertEqual(r.js_raw, [DEFAULT_JOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_absolute(self) -> None: r = resources.Resources(mode="absolute") assert r.mode == "absolute" assert r.dev == False assert r.js_raw == [DEFAULT_LOG_JS_RAW] assert r.css_raw == [] assert r.messages == []
def test_absolute_dev(self) -> None: r = resources.Resources(mode="absolute-dev") assert r.mode == "absolute" assert r.dev == True assert r.js_raw == [DEFAULT_LOG_JS_RAW, "Bokeh.settings.dev = true"] assert r.css_raw == [] assert r.messages == []
def test_relative(self): r = resources.Resources(mode="relative") assert r.mode == "relative" assert r.dev == False assert r.js_raw == [DEFAULT_LOG_JS_RAW] assert r.css_raw == [] assert r.messages == []
def test_relative_dev(self): r = resources.Resources(mode="relative-dev") assert r.mode == "relative" assert r.dev == True assert r.js_raw == [DEFAULT_LOG_JS_RAW, "Bokeh.settings.dev = true"] assert r.css_raw == [] assert r.messages == []
def test_cdn(self, monkeypatch) -> None: monkeypatch.setattr(resources, "__version__", "1.0") r = resources.Resources(mode="cdn", version="1.0") assert r.mode == "cdn" assert r.dev == False assert r.js_raw == [DEFAULT_LOG_JS_RAW] assert r.css_raw == [] assert r.messages == [] resources.__version__ = "1.0-1-abc" r = resources.Resources(mode="cdn", version="1.0") assert r.messages == [{ "text": "Requesting CDN BokehJS version '1.0' from Bokeh development version '1.0-1-abc'. This configuration is unsupported and may not work!", "type": "warn", }]
def test_inline(self): r = resources.Resources(mode="inline") self.assertEqual(r.mode, "inline") self.assertEqual(r.dev, False) self.assertEqual(len(r.js_raw), 3) self.assertEqual(r.js_raw[-1], DEFAULT_LOG_JS_RAW) self.assertEqual(len(r.css_raw), 2) self.assertEqual(r.messages, [])
def test_inline(self) -> None: r = resources.Resources(mode="inline") assert r.mode == "inline" assert r.dev == False assert len(r.js_raw) == 4 assert r.js_raw[-1] == DEFAULT_LOG_JS_RAW assert len(r.css_raw) == 0 assert r.messages == []
def test_log_level(self) -> None: r = resources.Resources() for level in LOG_LEVELS: r.log_level = level assert r.log_level == level if not r.dev: assert r.js_raw[-1] == 'Bokeh.set_log_level("%s");' % level with pytest.raises(ValueError): setattr(r, "log_level", "foo")
def test_server_dev(self): r = resources.Resources(mode="server-dev") self.assertEqual(r.mode, "server") self.assertEqual(r.dev, True) self.assertEqual(len(r.js_raw), 1) self.assertTrue(r.js_raw[0].startswith('require.config({ baseUrl:')) self.assertTrue(r.js_raw[0].endswith(join('static', 'js') + '" });')) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, []) r = resources.Resources(mode="server-dev", root_url="http://foo/") self.assertEqual(len(r.js_raw), 1) self.assertTrue(r.js_raw[0].startswith('require.config({ baseUrl:')) self.assertTrue(r.js_raw[0].endswith(join('static', 'js') + '" });')) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_server_root_url_empty(self): r = resources.Resources(mode="server", root_url="") self.assertEqual(r.js_raw, [DEFAULT_LOG_JS_RAW]) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, []) self.assertEqual(r.js_files, ['static/js/bokeh.min.js', 'static/js/bokeh-widgets.min.js']) self.assertEqual(r.css_files, ['static/css/bokeh.min.css', 'static/css/bokeh-widgets.min.css'])
def test_absolute_dev(self): r = resources.Resources(mode="absolute-dev") self.assertEqual(r.mode, "absolute") self.assertEqual(r.dev, True) self.assertEqual(len(r.js_raw), 1) self.assertTrue(r.js_raw[0].startswith('require.config({ baseUrl:')) self.assertTrue(r.js_raw[0].endswith(join('static', 'js') + '" });')) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])
def test_server_with_versioner(self): def versioner(path): return path + "?v=VERSIONED" r = resources.Resources(mode="server", root_url="http://foo/", path_versioner=versioner) self.assertEqual(r.js_files, ['http://foo/static/js/bokeh.min.js?v=VERSIONED', 'http://foo/static/js/bokeh-widgets.min.js?v=VERSIONED']) self.assertEqual(r.css_files, ['http://foo/static/css/bokeh.min.css?v=VERSIONED', 'http://foo/static/css/bokeh-widgets.min.css?v=VERSIONED'])
def test_server_with_versioner(self): def versioner(path): return path + "?v=VERSIONED" r = resources.Resources(mode="server", root_url="http://foo/", path_versioner=versioner) assert r.js_files == ['http://foo/static/js/bokeh.min.js?v=VERSIONED', 'http://foo/static/js/bokeh-widgets.min.js?v=VERSIONED', 'http://foo/static/js/bokeh-tables.min.js?v=VERSIONED', 'http://foo/static/js/bokeh-gl.min.js?v=VERSIONED']
def test_server_root_url_empty(self): r = resources.Resources(mode="server", root_url="") assert r.js_raw == [DEFAULT_LOG_JS_RAW] assert r.css_raw == [] assert r.messages == [] assert r.js_files == ['static/js/bokeh.min.js', 'static/js/bokeh-widgets.min.js', 'static/js/bokeh-tables.min.js', 'static/js/bokeh-gl.min.js']
def test_relative_dev(self): r = resources.Resources(mode="relative-dev") self.assertEqual(r.mode, "relative") self.assertEqual(r.dev, True) self.assertEqual(len(r.js_raw), 1) self.assertTrue(r.js_raw[0].startswith('require.config({ baseUrl:')) self.assertTrue( r.js_raw[0].endswith(join('bokehjs', 'build', 'js') + '" });')) self.assertEqual(r.css_raw, []) self.assertEqual(r.messages, [])