From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 78A021381F3 for ; Sun, 15 Sep 2013 22:38:29 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 21D8CE09B1; Sun, 15 Sep 2013 22:38:27 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 8C8F9E09B1 for ; Sun, 15 Sep 2013 22:38:26 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 5746833EB32 for ; Sun, 15 Sep 2013 22:38:25 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id BF843E5465 for ; Sun, 15 Sep 2013 22:38:22 +0000 (UTC) From: "Jauhien Piatlicki" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Jauhien Piatlicki" Message-ID: <1379280850.9ee27d984bb6f56e20c937e1436230c2c06e8987.jauhien@gentoo> Subject: [gentoo-commits] proj/g-sorcery:master commit in: tests/ X-VCS-Repository: proj/g-sorcery X-VCS-Files: tests/test_FileJSON.py X-VCS-Directories: tests/ X-VCS-Committer: jauhien X-VCS-Committer-Name: Jauhien Piatlicki X-VCS-Revision: 9ee27d984bb6f56e20c937e1436230c2c06e8987 X-VCS-Branch: master Date: Sun, 15 Sep 2013 22:38:22 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: a7d592c1-73a6-4d4f-8462-7731d5924e5a X-Archives-Hash: a92d246181213c6edde0c6961457aeac commit: 9ee27d984bb6f56e20c937e1436230c2c06e8987 Author: Jauhien Piatlicki (jauhien) gmail com> AuthorDate: Sun Sep 15 21:34:10 2013 +0000 Commit: Jauhien Piatlicki gmail com> CommitDate: Sun Sep 15 21:34:10 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=9ee27d98 add tests for FileJSON with serialization --- tests/test_FileJSON.py | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) 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