예제 #1
0
 def test_warning_with_short_palette(self, mock_warn, mock_error) -> None:
     m = bmm.CategoricalColorMapper(factors=["a", "b", "c"],
                                    palette=["red", "green"])
     issues = check_integrity([m])
     process_validation_issues(issues)
     assert not mock_error.called
     assert mock_warn.called
예제 #2
0
def test_check_pass(mock_warn: MagicMock, mock_error: MagicMock) -> None:
    m = Mod()

    issues = v.check_integrity([m])
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert not mock_warn.called
예제 #3
0
 def test(layout: LayoutDOM) -> None:
     with mock.patch("bokeh.core.validation.check.log") as mock_logger:
         issues = check_integrity([layout])
         process_validation_issues(issues)
     assert mock_logger.error.call_count == 1
     assert mock_logger.error.call_args[0][0].startswith(
         "E-1027 (REPEATED_LAYOUT_CHILD): The same model can't be used multiple times in a layout"
     )
예제 #4
0
def test_process_validation_issues_error(mock_warn: MagicMock, mock_error: MagicMock) -> None:
    issues = ValidationIssues(
        error=[],
        warning=[ValidationIssue(9999, "EXT:W", "Custom extension reports warning", "wrn")],
    )
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert mock_warn.called
예제 #5
0
 def test_missing_renderers(self) -> None:
     p = figure()
     p.renderers = []
     with mock.patch('bokeh.core.validation.check.log') as mock_logger:
         issues = check_integrity([p])
         process_validation_issues(issues)
     assert mock_logger.warning.call_count == 1
     assert mock_logger.warning.call_args[0][0].startswith("W-1000 (MISSING_RENDERERS): Plot has no renderers")
예제 #6
0
def test_process_validation_issues_error(mock_warn, mock_error) -> None:
    issues = {
        'error': [],
        'warning': [(9999, 'EXT:W', 'Custom extension reports warning', 'wrn')]
    }
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert mock_warn.called
예제 #7
0
def test_silence_with_bad_input_and_check_warn(mock_warn: MagicMock, mock_error: MagicMock) -> None:
    m = Mod(foo=-10)
    with pytest.raises(ValueError, match="Input to silence should be a warning object"):
        v.silence(cast(Any, "EXT:W"))
    issues = v.check_integrity([m])
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert mock_warn.called
예제 #8
0
 def test_no_warning_with_long_palette(self, mock_warn: MagicMock,
                                       mock_error: MagicMock) -> None:
     m = bmm.CategoricalColorMapper(
         factors=["a", "b", "c"],
         palette=["red", "green", "orange", "blue"])
     issues = check_integrity([m])
     process_validation_issues(issues)
     assert not mock_error.called
     assert not mock_warn.called
예제 #9
0
def test_legend_item_with_field_label_raises_error_if_field_not_in_cds() -> None:
    legend_item = LegendItem()
    gr_1 = GlyphRenderer(data_source=ColumnDataSource())
    legend_item.label = field('label')
    legend_item.renderers = [gr_1]
    with mock.patch('bokeh.core.validation.check.log') as mock_logger:
        issues = check_integrity([legend_item])
        process_validation_issues(issues)
        assert mock_logger.error.call_count == 1
예제 #10
0
def test_can_add_multiple_glyph_renderers_to_legend_item() -> None:
    legend_item = LegendItem()
    gr_1 = GlyphRenderer(data_source=ColumnDataSource())
    gr_2 = GlyphRenderer(data_source=ColumnDataSource())
    legend_item.renderers = [gr_1, gr_2]
    with mock.patch('bokeh.core.validation.check.log') as mock_logger:
        issues = check_integrity([legend_item])
        process_validation_issues(issues)
        assert mock_logger.error.call_count == 0
예제 #11
0
def test_legend_item_with_value_label_and_different_data_sources_does_not_raise_a_validation_error() -> None:
    legend_item = LegendItem()
    gr_1 = GlyphRenderer(data_source=ColumnDataSource())
    gr_2 = GlyphRenderer(data_source=ColumnDataSource())
    legend_item.label = value('label')
    legend_item.renderers = [gr_1, gr_2]
    with mock.patch('bokeh.core.validation.check.log') as mock_logger:
        issues = check_integrity([legend_item])
        process_validation_issues(issues)
        assert mock_logger.error.call_count == 0
예제 #12
0
def test_silence_with_bad_input_and_check_warn(mock_warn, mock_error) -> None:
    m = Mod(foo=-10)
    with pytest.raises(ValueError,
                       match=('Input to silence should be a '
                              'warning object')):
        v.silence('EXT:W')
    issues = v.check_integrity([m])
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert mock_warn.called
예제 #13
0
 def test_bad_extra_range_only_immediate_refs(self) -> None:
     # test whether adding a figure (*and* it's extra ranges)
     # to another's references doesn't create a false positive
     p, dep = figure(), figure()
     dep.extra_x_ranges['foo'] = Range1d()
     dep.grid.x_range_name="foo"
     p.grid[0].js_on_change("dimension", CustomJS(code = "", args = {"toto": dep.grid[0]}))
     with mock.patch('bokeh.core.validation.check.log') as mock_logger:
         issues = check_integrity([p])
         process_validation_issues(issues)
     assert mock_logger.error.call_count == 0
예제 #14
0
def test_silence_and_check_warn(mock_warn, mock_error) -> None:
    from bokeh.core.validation.warnings import EXT
    m = Mod(foo=-10)
    try:
        v.silence(EXT)  # turn the warning off
        issues = v.check_integrity([m])
        v.process_validation_issues(issues)
        assert not mock_error.called
        assert not mock_warn.called
    finally:
        v.silence(EXT, False)  # turn the warning back on
        issues = v.check_integrity([m])
        v.process_validation_issues(issues)
        assert not mock_error.called
        assert mock_warn.called
예제 #15
0
def test_silence_remove_warning_that_is_not_in_silencers_is_ok(mock_warn: MagicMock, mock_error: MagicMock) -> None:
    from bokeh.core.validation.warnings import EXT
    m = Mod(foo=-10)

    silencers0 = v.silence(EXT)  # turn the warning off
    assert len(silencers0) == 1

    silencers1 = v.silence(EXT, False)  # turn the warning back on
    silencers2 = v.silence(EXT, False)  # do it a second time - no-op
    assert len(silencers1) == 0
    assert silencers1 == silencers2

    issues = v.check_integrity([m])
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert mock_warn.called
예제 #16
0
def test_silence_warning_already_in_silencers_is_ok(mock_warn: MagicMock, mock_error: MagicMock) -> None:
    from bokeh.core.validation.warnings import EXT
    m = Mod(foo=-10)
    try:
        silencers0 = v.silence(EXT)  # turn the warning off
        silencers1 = v.silence(EXT)  # do it a second time - no-op
        assert len(silencers0) == 1
        assert silencers0 == silencers1  # silencers is same as before

        issues = v.check_integrity([m])
        v.process_validation_issues(issues)
        assert not mock_error.called
        assert not mock_warn.called
    finally:
        v.silence(EXT, False)  # turn the warning back on
        issues = v.check_integrity([m])
        v.process_validation_issues(issues)
        assert not mock_error.called
        assert mock_warn.called
예제 #17
0
    def test_bad_extra_range_name(self) -> None:
        p = figure()
        p.xaxis.x_range_name = "junk"
        with mock.patch('bokeh.core.validation.check.log') as mock_logger:
            issues = check_integrity([p])
            process_validation_issues(issues)
        assert mock_logger.error.call_count == 1
        assert mock_logger.error.call_args[0][0].startswith(
            "E-1020 (BAD_EXTRA_RANGE_NAME): An extra range name is configured with a name that does not correspond to any range: x_range_name='junk' [LinearAxis"
        )

        p = figure()
        p.extra_x_ranges['foo'] = Range1d()
        p.grid.x_range_name = "junk"
        with mock.patch('bokeh.core.validation.check.log') as mock_logger:
            issues = check_integrity([p])
            process_validation_issues(issues)
        assert mock_logger.error.call_count == 1
        assert mock_logger.error.call_args[0][0].startswith(
            "E-1020 (BAD_EXTRA_RANGE_NAME): An extra range name is configured with a name that does not correspond to any range: x_range_name='junk' [Grid"
        )
        assert mock_logger.error.call_args[0][0].count("Grid") == 2
예제 #18
0
    def test_duplicate_factors_raises_validation_error(self) -> None:
        r = FactorRange("foo", "bar", "foo")
        with mock.patch('bokeh.core.validation.check.log') as mock_logger:
            issues = check_integrity([r])
            process_validation_issues(issues)
        assert mock_logger.error.call_count == 1

        r = FactorRange(factors=[("foo", "a"), ("foo", "b"),  ("foo", "a")])
        with mock.patch('bokeh.core.validation.check.log') as mock_logger:
            issues = check_integrity([r])
            process_validation_issues(issues)
        assert mock_logger.error.call_count == 1

        r = FactorRange(factors=[("foo", "a", "1"), ("foo", "a", "2"),  ("foo", "a", "1")])
        with mock.patch('bokeh.core.validation.check.log') as mock_logger:
            issues = check_integrity([r])
            process_validation_issues(issues)
        assert mock_logger.error.call_count == 1
예제 #19
0
def test_check_warn(mock_warn, mock_error) -> None:
    m = Mod(foo=-10)
    issues = v.check_integrity([m])
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert mock_warn.called
예제 #20
0
def test_process_validation_issues_pass(mock_warn: MagicMock,
                                        mock_error: MagicMock) -> None:
    issues = ValidationIssues(error=[], warning=[])
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert not mock_warn.called
예제 #21
0
def test_process_validation_issues_pass(mock_warn, mock_error) -> None:
    issues = {'error': [], 'warning': []}
    v.process_validation_issues(issues)
    assert not mock_error.called
    assert not mock_warn.called