def test_set_in_place(self): jps = JSONPointerStore() doc = {'a':'b'} value_random = rand_string() name1, expr1 = '1', config_value('/a') jps.add(name1, expr1) # in_place is False so a new doc is created and the previous one should be retained new_doc = jps.set(name1, doc, value_random, True, in_place=False) value = jps.get(name1, new_doc) self.assertEquals(value, value_random) value = jps.get(name1, doc) self.assertEquals(value, 'b')
def test_set_in_place(self): jps = JSONPointerStore() doc = {'a': 'b'} value_random = rand_string() name1, expr1 = '1', config_value('/a') jps.add(name1, Bunch(value=expr1.value)) # in_place is False so a new doc is created and the previous one should be retained new_doc = jps.set(name1, doc, value_random, True, in_place=False) value = jps.get(name1, new_doc) self.assertEquals(value, value_random) value = jps.get(name1, doc) self.assertEquals(value, 'b')
def test_set_defaults(self): jps = JSONPointerStore() value1 = {'b':{}} value2 = {'c':{}} doc = {} name1, expr1 = '1', config_value('/a') name2, expr2 = '2', config_value('/a/b') jps.add(name1, expr1) jps.add(name2, expr2) jps.set(name1, doc, value1) value = jps.get(name1, doc) self.assertEquals(value, value1) jps.set(name2, doc, value2) value = jps.get(name2, doc) self.assertDictEqual(value, value2)
def test_set_defaults(self): jps = JSONPointerStore() value1 = {'b': {}} value2 = {'c': {}} doc = {} name1, expr1 = '1', config_value('/a') name2, expr2 = '2', config_value('/a/b') jps.add(name1, Bunch(value=expr1.value)) jps.add(name2, Bunch(value=expr2.value)) jps.set(name1, doc, value1) value = jps.get(name1, doc) self.assertEquals(value, value1) jps.set(name2, doc, value2) value = jps.get(name2, doc) self.assertDictEqual(value, value2)
def test_set_skip_missing(self): jps = JSONPointerStore() doc = {} name1, expr1 = '1', config_value('/a') name2, expr2 = '2', config_value('/b') value1, value2 = rand_string(2) default1, default2 = rand_string(2) jps.add(name1, expr1) jps.add(name2, expr2) # value is equal to default1 because it is never set by jps.set jps.set(name1, doc, value1, True) value = jps.get(name1, doc, default1) self.assertEquals(value, default1) self.assertDictEqual(doc, {}) jps.set(name2, doc, value2) value = jps.get(name2, doc, default2) self.assertEquals(value, value2) self.assertDictEqual(doc, {'b':value2})
def test_set_skip_missing(self): jps = JSONPointerStore() doc = {} name1, expr1 = '1', config_value('/a') name2, expr2 = '2', config_value('/b') value1, value2 = rand_string(2) default1, default2 = rand_string(2) jps.add(name1, Bunch(value=expr1.value)) jps.add(name2, Bunch(value=expr2.value)) # value is equal to default1 because it is never set by jps.set jps.set(name1, doc, value1, True) value = jps.get(name1, doc, default1) self.assertEquals(value, default1) self.assertDictEqual(doc, {}) jps.set(name2, doc, value2) value = jps.get(name2, doc, default2) self.assertEquals(value, value2) self.assertDictEqual(doc, {'b': value2})
def test_get(self): jps = JSONPointerStore() c_value, d_value = rand_string(2) doc = { 'a': { 'b': [ {'c': c_value}, {'d': d_value}, ] }, 'e': None, 'f': 0 } name1, expr1 = '1', config_value('/a') name2, expr2 = '2', config_value('/a/b') name3, expr3 = '3', config_value('/a/b/0') name4, expr4 = '4', config_value('/a/b/1') name5, expr5 = '5', config_value('/a/b/0/c') # This will return default because the path points to None name6, expr6 = '6', config_value('/e') # This will return default because there is no such path name7, expr7 = '7', config_value('/e/e2/e3') # This will not return None because 0 is not None even though it's False in boolean sense name8, expr8 = '8', config_value('/f') jps.add(name1, expr1) value = jps.get(name1, doc) self.assertListEqual(value.keys(), ['b']) jps.add(name2, expr2) value = jps.get(name2, doc) self.assertDictEqual(value[0], {'c':c_value}) self.assertDictEqual(value[1], {'d':d_value}) jps.add(name3, expr3) value = jps.get(name3, doc) self.assertDictEqual(value, {'c':c_value}) jps.add(name4, expr4) value = jps.get(name4, doc) self.assertDictEqual(value, {'d':d_value}) jps.add(name5, expr5) value = jps.get(name5, doc) self.assertEquals(value, c_value) default1 = rand_string() default2 = rand_string() jps.add(name6, expr6) value = jps.get(name6, doc, default1) self.assertEquals(value, default1) jps.add(name7, expr7) value = jps.get(name7, doc, default2) self.assertEquals(value, default2) jps.add(name8, expr8) value = jps.get(name8, doc) self.assertEquals(value, 0)
def test_get(self): jps = JSONPointerStore() c_value, d_value = rand_string(2) doc = { 'a': { 'b': [ { 'c': c_value }, { 'd': d_value }, ] }, 'e': None, 'f': 0 } name1, expr1 = '1', config_value('/a') name2, expr2 = '2', config_value('/a/b') name3, expr3 = '3', config_value('/a/b/0') name4, expr4 = '4', config_value('/a/b/1') name5, expr5 = '5', config_value('/a/b/0/c') # This will return default because the path points to None name6, expr6 = '6', config_value('/e') # This will return default because there is no such path name7, expr7 = '7', config_value('/e/e2/e3') # This will not return None because 0 is not None even though it's False in boolean sense name8, expr8 = '8', config_value('/f') jps.add(name1, Bunch(value=expr1.value)) value = jps.get(name1, doc) self.assertListEqual(value.keys(), ['b']) jps.add(name2, Bunch(value=expr2.value)) value = jps.get(name2, doc) self.assertDictEqual(value[0], {'c': c_value}) self.assertDictEqual(value[1], {'d': d_value}) jps.add(name3, Bunch(value=expr3.value)) value = jps.get(name3, doc) self.assertDictEqual(value, {'c': c_value}) jps.add(name4, Bunch(value=expr4.value)) value = jps.get(name4, doc) self.assertDictEqual(value, {'d': d_value}) jps.add(name5, Bunch(value=expr5.value)) value = jps.get(name5, doc) self.assertEquals(value, c_value) default1 = rand_string() default2 = rand_string() jps.add(name6, Bunch(value=expr6.value)) value = jps.get(name6, doc, default1) self.assertEquals(value, default1) jps.add(name7, Bunch(value=expr7.value)) value = jps.get(name7, doc, default2) self.assertEquals(value, default2) jps.add(name8, Bunch(value=expr8.value)) value = jps.get(name8, doc) self.assertEquals(value, 0)