Example #1
0
    def test_serialized_default(self) -> None:
        p = bcpb.Property()
        assert p.serialized == True
        assert p.readonly == False

        # readonly=True sets serialized=False if unspecified
        p = bcpb.Property(readonly=True)
        assert p.serialized == False
        assert p.readonly == True

        # explicit serialized value always respected
        p = bcpb.Property(readonly=True, serialized=True)
        assert p.serialized == True
        assert p.readonly == True
Example #2
0
    def test_prepare_value_uses__hinted_value(self,
                                              mock_hv: MagicMock) -> None:
        hp = HasProps()
        p = bcpb.Property()

        p.prepare_value(hp, "foo", 10)
        assert mock_hv.called
Example #3
0
 def test_matches_basic_types(self, capsys) -> None:
     p = bcpb.Property()
     for x in [1, 1.2, "a", np.arange(4), None, False, True, {}, []]:
         assert p.matches(x, x) is True
         assert p.matches(x, "junk") is False
     out, err = capsys.readouterr()
     assert err == ""
Example #4
0
    def test_assert_bools(self) -> None:
        hp = HasProps()
        p = bcpb.Property()

        p.asserts(True, "true")
        assert p.prepare_value(hp, "foo", 10) == 10

        p.asserts(False, "false")
        with pytest.raises(ValueError) as e:
            p.prepare_value(hp, "foo", 10)
            assert str(e) == "false"
Example #5
0
 def test_matches_compatible_arrays(self, capsys) -> None:
     p = bcpb.Property()
     a = np.arange(5)
     b = np.arange(5)
     assert p.matches(a, b) is True
     assert p.matches(a, b + 1) is False
     for x in [1, 1.2, "a", np.arange(4), None, False]:
         assert p.matches(a, x) is False
         assert p.matches(x, b) is False
     out, err = capsys.readouterr()
     assert err == ""
Example #6
0
    def test_assert_msg_funcs(self) -> None:
        hp = HasProps()
        p = bcpb.Property()

        def raise_(ex):
                raise ex

        p.asserts(False, lambda obj, name, value: raise_(ValueError("bad %s %s %s" % (hp==obj, name, value))))

        with pytest.raises(ValueError) as e:
                p.prepare_value(hp, "foo", 10)
                assert str(e) == "bad True name, 10"
Example #7
0
    def test_assert_functions(self) -> None:
        hp = HasProps()
        p = bcpb.Property()

        p.asserts(lambda obj, value: True, "true")
        p.asserts(lambda obj, value: obj is hp, "true")
        p.asserts(lambda obj, value: value == 10, "true")
        assert p.prepare_value(hp, "foo", 10) == 10

        p.asserts(lambda obj, value: False, "false")
        with pytest.raises(ValueError) as e:
            p.prepare_value(hp, "foo", 10)
            assert str(e) == "false"
Example #8
0
    def test_matches_non_dict_containers_with_array_false(self, capsys: Capture) -> None:
        p = bcpb.Property()
        d1 = [np.arange(10)]
        d2 = [np.arange(10)]
        assert p.matches(d1, d1) is True  # because object identity
        assert p.matches(d1, d2) is False

        t1 = (np.arange(10),)
        t2 = (np.arange(10),)
        assert p.matches(t1, t1) is True  # because object identity
        assert p.matches(t1, t2) is False

        out, err = capsys.readouterr()
        assert err == ""
Example #9
0
    def test_matches_dicts_with_index_values(self, capsys, pd) -> None:
        p = bcpb.Property()
        d1 = pd.DataFrame(dict(foo=np.arange(10)))
        d2 = pd.DataFrame(dict(foo=np.arange(10)))

        assert p.matches(d1.index, d1.index) is True
        assert p.matches(d1.index, d2.index) is True

        # XXX not sure if this is preferable to have match, or not
        assert p.matches(d1.index, list(range(10))) is True

        assert p.matches(d1.index, np.arange(11)) is False
        assert p.matches(d1.index, np.arange(10) + 1) is False
        assert p.matches(d1.index, 10) is False
        out, err = capsys.readouterr()
        assert err == ""
Example #10
0
    def test_matches_dicts_with_array_values(self, capsys) -> None:
        p = bcpb.Property()
        d1 = dict(foo=np.arange(10))
        d2 = dict(foo=np.arange(10))

        assert p.matches(d1, d1) is True
        assert p.matches(d1, d2) is True

        # XXX not sure if this is preferable to have match, or not
        assert p.matches(d1, dict(foo=list(range(10)))) is True

        assert p.matches(d1, dict(foo=np.arange(11))) is False
        assert p.matches(d1, dict(bar=np.arange(10))) is False
        assert p.matches(d1, dict(bar=10)) is False
        out, err = capsys.readouterr()
        assert err == ""
Example #11
0
def test_property_matches_dicts_with_series_values(capsys, pd):
    p = bcpb.Property()
    d1 = pd.DataFrame(dict(foo=np.arange(10)))
    d2 = pd.DataFrame(dict(foo=np.arange(10)))

    assert p.matches(d1.foo, d1.foo) is True
    assert p.matches(d1.foo, d2.foo) is True

    # XXX not sure if this is preferable to have match, or not
    assert p.matches(d1.foo, (range(10))) is True

    assert p.matches(d1.foo, np.arange(11)) is False
    assert p.matches(d1.foo, np.arange(10) + 1) is False
    assert p.matches(d1.foo, 10) is False
    out, err = capsys.readouterr()
    assert err == ""
Example #12
0
 def test_is_valid_supresses_validation_detail(self, mock_validate) -> None:
     p = bcpb.Property()
     p.is_valid(None)
     assert mock_validate.called
     assert mock_validate.call_args[0] == (None, False)
Example #13
0
 def test_matches_incompatible_arrays(self, capsys) -> None:
     p = bcpb.Property()
     a = np.arange(5)
     b = np.arange(5).astype(str)
     assert p.matches(a, b) is False
     out, err = capsys.readouterr()
Example #14
0
 def test__hinted_value_is_identity(self) -> None:
     p = bcpb.Property()
     assert p._hinted_value(10, "hint") == 10
     assert p._hinted_value(10, None) == 10
Example #15
0
def test_property_matches_incompatible_arrays(capsys):
    p = pb.Property()
    a = np.arange(5)
    b = np.arange(5).astype(str)
    assert p.matches(a, b) is False
    out, err = capsys.readouterr()