diff options
author | Jauhien Piatlicki (jauhien) <piatlicki@gmail.com> | 2013-09-15 23:34:10 +0200 |
---|---|---|
committer | Jauhien Piatlicki (jauhien) <piatlicki@gmail.com> | 2013-09-15 23:34:10 +0200 |
commit | 9ee27d984bb6f56e20c937e1436230c2c06e8987 (patch) | |
tree | 9f57256d666e4ec1d0ad04d52734050d8d28e841 | |
parent | g_sorcery/fileutils: fix (diff) | |
download | g-sorcery-9ee27d984bb6f56e20c937e1436230c2c06e8987.tar.gz g-sorcery-9ee27d984bb6f56e20c937e1436230c2c06e8987.tar.bz2 g-sorcery-9ee27d984bb6f56e20c937e1436230c2c06e8987.zip |
add tests for FileJSON with serialization
-rw-r--r-- | tests/test_FileJSON.py | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/test_FileJSON.py b/tests/test_FileJSON.py new file mode 100644 index 0000000..5bda353 --- /dev/null +++ b/tests/test_FileJSON.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" + test_FileJSON.py + ~~~~~~~~~~~~~~~~ + + FileJSON test suite + + :copyright: (c) 2013 by Jauhien Piatlicki + :license: GPL-2, see LICENSE for more details. +""" + +import json +import os +import unittest + +from g_sorcery.fileutils import FileJSON +from g_sorcery.exceptions import FileJSONError + +from tests.base import BaseTest + + +class NonSerializableClass(object): + pass + + +class SerializableClass(object): + + __slots__ = ("field1", "field2") + + def __init__(self, field1, field2): + self.field1 = field1 + self.field2 = field2 + + def __eq__(self, other): + return self.field1 == other.field1 \ + and self.field2 == other.field2 + + def serialize(self): + return {"field1": self.field1, "field2": self.field2} + + +class DeserializableClass(SerializableClass): + + @classmethod + def deserialize(cls, value): + return DeserializableClass(value["field1"], value["field2"]) + + +class TestFileJSON(BaseTest): + def setUp(self): + super(TestFileJSON, self).setUp() + self.directory = os.path.join(self.tempdir.name, 'tst') + self.name = 'tst.json' + self.path = os.path.join(self.directory, self.name) + + def test_read_nonexistent(self): + fj = FileJSON(self.directory, self.name, []) + content = fj.read() + self.assertEqual(content, {}) + self.assertTrue(os.path.isfile(self.path)) + + def test_read_nonexistent_mandatory_key(self): + fj = FileJSON(self.directory, self.name, ["mandatory1", "mandatory2"]) + content = fj.read() + self.assertEqual(content, {"mandatory1":"", "mandatory2":""}) + self.assertTrue(os.path.isfile(self.path)) + + def test_read_luck_of_mandatory_key(self): + fj = FileJSON(self.directory, self.name, ["mandatory"]) + os.makedirs(self.directory) + with open(self.path, 'w') as f: + json.dump({"test":"test"}, f) + self.assertRaises(FileJSONError, fj.read) + + def test_write_luck_of_mandatory_key(self): + fj = FileJSON(self.directory, self.name, ["mandatory"]) + self.assertRaises(FileJSONError, fj.write, {"test":"test"}) + + def test_write_read(self): + fj = FileJSON(self.directory, self.name, ["mandatory"]) + content = {"mandatory":"1", "test":"2"} + fj.write(content) + content_r = fj.read() + self.assertEqual(content, content_r) + + def test_serializable(self): + fj = FileJSON(self.directory, self.name, []) + content = SerializableClass("1", "2") + fj.write(content) + content_r = fj.read() + self.assertEqual(content_r, {"field1":"1", "field2":"2"}) + self.assertRaises(TypeError, fj.write, NonSerializableClass()) + + def test_deserializable(self): + fj = FileJSON(self.directory, self.name, []) + content = DeserializableClass("1", "2") + fj.write(content) + content_r = fj.read() + self.assertEqual(content, content_r) + +def suite(): + suite = unittest.TestSuite() + suite.addTest(TestFileJSON('test_read_nonexistent')) + suite.addTest(TestFileJSON('test_read_nonexistent_mandatory_key')) + suite.addTest(TestFileJSON('test_read_luck_of_mandatory_key')) + suite.addTest(TestFileJSON('test_write_luck_of_mandatory_key')) + suite.addTest(TestFileJSON('test_write_read')) + suite.addTest(TestFileJSON('test_serializable')) + suite.addTest(TestFileJSON('test_deserializable')) + return suite |