def test_object_wrap_w_deep_path(self): d = SampleData() d.a = GreedyAccess(c=3) dd = GreedyAccess(d) self.assertEqual(dd["a.c"], 3) self.assertEqual(dd, {"a": {"c": 3}, "b": 30})
def test_pop(self): l = GreedyAccess([1, 2, 3, 4]) self.assertEquals(l.pop(3), 4) self.assertEquals(l.pop(0), 1) self.assertEquals(l.pop(1), 3) self.assertEquals(l.pop(), 2)
def test_assign1(self): a = {} b = GreedyAccess(a) b.c = "test1" b.d.e = "test2" b.f.g.h = "test3" b.f.i = "test4" b.k["l.m.n"] = "test5" expected = { "c": "test1", "d": { "e": "test2" }, "f": { "g": { "h": "test3" }, "i": "test4" }, "k": { "l": { "m": { "n": "test5" } } } } self.assertEqual(a, expected)
def test_object_wrap(self): d = SampleData() dd = GreedyAccess(d) self.assertEqual(dd["a"], 20) self.assertEqual(dd, {"a": 20, "b": 30}) self.assertIs(GreedyAccess.unbox(dd), dd)
def test_leaves_of_mappings(self): a = GreedyAccess({"a": _TestMapping()}) a.a.a = {"a": 1} a.a.b = {"b": 2} leaves = GreedyAccess(dict(a.leaves())) self.assertEqual(a.a.a['a'], leaves["a\.a\.a"], "expecting 1") self.assertEqual(a.a.b['b'], leaves["a\.b\.b"], "expecting 2")
def test_values(self): a = GreedyAccess({"a": 1, "b": 2}) result = [] for v in a.values(): result.append(v) expected = {1, 2} self.assertAlmostEqual(result, expected)
def test_delete2(self): a = GreedyAccess({"b": {"c": 1, "d": 2}}) del a.b.c self.assertEqual({"b": {"d": 2}}, a) self.assertEqual(a, {"b": {"d": 2}}) a = GreedyAccess({"b": {"c": 1, "d": 2}}) a.b.c = None self.assertEqual({"b": {"d": 2}}, a) self.assertEqual(a, {"b": {"d": 2}})
def test_assign4(self): # IMPOTENT ASSIGNMENTS DO NOTHING a = {"c": {"d": {}}} b = GreedyAccess(a) b.c.d = None expected = {"c": {}} self.assertEqual(a, expected) a = {"c": {"d": {}}} b = GreedyAccess(a) b.c = None expected = {} self.assertEqual(a, expected)
def test_set_default(self): a = {"x": {"y": 1}} b = {"x": {"z": 2}} c = {} d = set_default(c, a, b) self.assertTrue( GreedyAccess.unbox(d) is c, "expecting first parameter to be returned") self.assertEqual(d.x.y, 1, "expecting d to have attributes of a") self.assertEqual(d.x.z, 2, "expecting d to have attributes of b") self.assertEqual( GreedyAccess(a).x.z, None, "a should not have been altered")
def test_setitem_and_deep(self): a = {} b = GreedyAccess(a) b.c["d"].e.f = 3 expected = {"c": {"d": {"e": {"f": 3}}}} self.assertEqual(a, expected)
def test_assign5(self): a = {} b = GreedyAccess(a) b.c["d\.e"].f = 2 expected = {"c": {"d.e": {"f": 2}}} self.assertEqual(a, expected)
def test_get_value(self): a = GreedyAccess({"a": 1, "b": {}}) if a.a != 1: Log.error("error") if not isinstance(a.b, Mapping): Log.error("error")
def test_assign8(self): a = {} b = GreedyAccess(a) b["a"][literal_field(literal_field("b.html"))]["z"] = 3 expected = {"a": {"b\\.html": {"z": 3}}} self.assertEqual(a, expected)
def test_assign9(self): a = {} b = GreedyAccess(a) b["a"]["."] = 1 expected = {"a": 1} self.assertEqual(a, expected)
def test_dot_self(self): a = GreedyAccess(b=42) assert a["."] == a assert a["."].b == 42 a["."] = {"c": 42} assert a.c == 42 assert a.b == None
def test_null(self): a = 0 b = 0 c = Null d = Null e = GreedyAccess() f = GreedyAccess() if a == b: pass else: Log.error("error") if c == d: pass else: Log.error("error") if a == c: Log.error("error") if d == b: Log.error("error") if c == None: pass else: Log.error("error") if not c: pass else: Log.error("error") if Null != Null: Log.error("error") if Null != None: Log.error("error") if None != Null: Log.error("error") if e.test != f.test: Log.error("error")
def test_dict_args(self): def show_kwargs(**kwargs): return kwargs a = GreedyAccess() a["a"] = 1 a["b"] = 2 d = show_kwargs(**a) self.assertAlmostEqual(d, {"a": 1, "b": 2})
def test_assign7(self): a = {} b = GreedyAccess(a) b["c.d.e\.f"] = 1 b["c.d.g\.h"] = 2 expected = {"c": {"d": {"e.f": 1, "g.h": 2}}} self.assertEqual(a, expected)
def test_assign_and_use2(self): a = GreedyAccess({}) agg = a.b.c agg += [] agg.append("test value") self.assertEqual(a, {"b": {"c": ["test value"]}}) self.assertEqual(a.b, {"c": ["test value"]}) self.assertEqual(a.b.c, ["test value"])
def test_assign2(self): a = {} b = GreedyAccess(a) b_c = b.c b.c.d = "test1" b_c.e = "test2" expected = {"c": {"d": "test1", "e": "test2"}} self.assertEqual(a, expected)
def test_deep_null_assignment(self): temp = GreedyAccess({"a": 0}) e = temp.e e.s.t = 1 e.s.s = 2 self.assertEqual(temp, { "a": 0, "e": { "s": { "s": 2, "t": 1 } } }, "expecting identical")
def test_assign3(self): # IMPOTENT ASSIGNMENTS DO NOTHING a = {} b = GreedyAccess(a) b.c = None expected = {} self.assertEqual(a, expected) b.c.d = None expected = {} self.assertEqual(a, expected) b["c.d"] = None expected = {} self.assertEqual(a, expected) b.c.d.e = None expected = {} self.assertEqual(a, expected) b.c["d.e"] = None expected = {} self.assertEqual(a, expected)
def test_increment(self): a = {} b = GreedyAccess(a) b.c1.d += 1 b.c2.e += "e" b.c3.f += ["f"] b["c\\.a"].d += 1 self.assertEqual(a, { "c1": { "d": 1 }, "c2": { "e": "e" }, "c3": { "f": ["f"] }, "c.a": { "d": 1 } }) b.c1.d += 2 b.c2.e += "f" b.c3.f += ["g"] b["c\\.a"].d += 3 self.assertEqual( a, { "c1": { "d": 3 }, "c2": { "e": "ef" }, "c3": { "f": ["f", "g"] }, "c.a": { "d": 4 } })
def test_slicing(self): def diff(record, index, records): """ WINDOW FUNCTIONS TAKE THE CURRENT record, THE index THAT RECORD HAS IN THE WINDOW, AND THE (SORTED) LIST OF ALL records """ # COMPARE CURRENT VALUE TO MAX OF PAST 5, BUT NOT THE VERY LAST ONE try: return record - MAX(records[index - 6:index - 1:]) except Exception as e: return None data1_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] result1 = [diff(r, i, data1_list) for i, r in enumerate(data1_list)] assert result1 == [-7, None, None, None, None, None, 2, 2, 2] # WHAT IS EXPECTED, BUT NOT WHAT WE WANT data2_list = GreedyAccess(data1_list) result2 = [diff(r, i, data2_list) for i, r in enumerate(data2_list)] assert result2 == [None, None, 2, 2, 2, 2, 2, 2, 2]
def test_empty_object_is_not_null(self): self.assertFalse( GreedyAccess({}) == None, "expect empty objects to not compare well with None")
def test_null_access(self): a = GreedyAccess() c = a.b[b'test'] self.assertTrue(c == None, "Expecting Null to accept str() for item access")
def test_key_in_data(self): a = GreedyAccess({"key": {}}) self.assertIn("key", a)
def test_wrap_GreedyAccess(self): a = GreedyAccess({"a": 1, "b": 2}) b = GreedyAccess(a) self.assertIs(a, b, "expecting same object")
def test_is_mapping(self): self.assertTrue(isinstance(GreedyAccess(), Mapping), "All GreedyAccess must be Mappings")
def test_add_null_to_list(self): expected = GreedyAccess(["test", "list"]) test = expected + None self.assertEqual(test, expected, "expecting adding None to list does not change list")