def test_init_encode(self):
        for _AttributeDict in [AttributeDict, CustomAttributeDict]:
            attr_dict = _AttributeDict()

            self.assertDeepEqual(helper.json_encode(attr_dict), '{}')
            # self.assertDeepEqual(helper.json_encode(attr_dict.__dict__), '{}')

            attr_dict = _AttributeDict(None)

            self.assertDeepEqual(helper.json_encode(attr_dict), '{}')
            # self.assertDeepEqual(helper.json_encode(attr_dict.__dict__), '{}')

            attr_dict = _AttributeDict({})

            self.assertDeepEqual(helper.json_encode(attr_dict), '{}')
            # self.assertDeepEqual(helper.json_encode(attr_dict.__dict__), '{}')

            attr_dict = _AttributeDict({'foo': None, '__reserved': True})

            self.assertDeepEqual(helper.json_encode(attr_dict), '{"foo":null}')
            # self.assertDeepEqual(helper.json_encode(attr_dict.__dict__), '{"foo":null}')

            attr_dict = _AttributeDict({'foo': {}, '__reserved': True})

            self.assertDeepEqual(helper.json_encode(attr_dict), '{"foo":{}}')
            # self.assertDeepEqual(helper.json_encode(attr_dict.__dict__), '{"foo":{}}')

            attr_dict = _AttributeDict({
                'foo': {
                    'bar': [1, 2, 3]
                },
                '__reserved': True
            })

            self.assertDeepEqual(helper.json_encode(attr_dict),
                                 '{"foo":{"bar":[1,2,3]}}')
    def test_key_encode(self):
        for _AttributeDict in [AttributeDict, CustomAttributeDict]:
            attr_dict = _AttributeDict()

            attr_dict.foo = None

            self.assertDeepEqual(helper.json_encode(attr_dict), '{"foo":null}')
            self.assertDeepEqual(helper.json_encode(attr_dict.__dict__),
                                 '{"foo":null}')

            attr_dict.foo = {}

            self.assertDeepEqual(helper.json_encode(attr_dict), '{"foo":{}}')
            self.assertDeepEqual(helper.json_encode(attr_dict.__dict__),
                                 '{"foo":{}}')

            attr_dict.foo = {'bar': [1, 2, 3], '__reserved': True}

            self.assertDeepEqual(helper.json_encode(attr_dict),
                                 '{"foo":{"bar":[1,2,3]}}')
            self.assertDeepEqual(helper.json_encode(attr_dict.__dict__),
                                 '{"foo":{"bar":[1,2,3]}}')

            attr_dict.foo.bar = [3, 2, 1]

            self.assertDeepEqual(helper.json_encode(attr_dict),
                                 '{"foo":{"bar":[3,2,1]}}')
            self.assertDeepEqual(helper.json_encode(attr_dict.__dict__),
                                 '{"foo":{"bar":[3,2,1]}}')

            attr_dict.baz = True

            self.assertDeepEqual(helper.json_encode(attr_dict),
                                 '{"foo":{"bar":[3,2,1]},"baz":true}')
            self.assertDeepEqual(helper.json_encode(attr_dict.__dict__),
                                 '{"foo":{"bar":[3,2,1]},"baz":true}')

            del attr_dict.baz

            self.assertDeepEqual(helper.json_encode(attr_dict),
                                 '{"foo":{"bar":[3,2,1]}}')
            self.assertDeepEqual(helper.json_encode(attr_dict.__dict__),
                                 '{"foo":{"bar":[3,2,1]}}')