From: Christian Van Wambeke Date: Mon, 14 May 2018 08:28:55 +0000 (+0200) Subject: mv test_025_pyconf.py test_035 & test_030_pyconf_0_3_9.py test_039 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=6cf7d93f5dcd289299da8b1631def4bf652034d3;p=tools%2Fsat.git mv test_025_pyconf.py test_035 & test_030_pyconf_0_3_9.py test_039 --- diff --git a/test/test_024_logging.py b/test/test_024_logging.py index 4f0854f..bc3bd50 100755 --- a/test/test_024_logging.py +++ b/test/test_024_logging.py @@ -65,7 +65,7 @@ class LoggerSat(LOGI.Logger): above log.debug(msg) to assume store long log asci in files txt under/outside files xml - see: /usr/lib/python2.7/logging/*.py & + see: /usr/lib64/python2.7/logging/*.py """ _TRACE = LOGI.INFO - 2 # just below @@ -150,89 +150,6 @@ class TestCase(unittest.TestCase): rec = stream_handler.buffer[-1] self.assertEqual(rec.levelname, "DEBUG") self.assertEqual(rec.msg, "!!! test debug") - - - """ - def test_015(self): - t = DATT.DateTime("now") - self.assertTrue(t.isOk()) - rrt = str(t) - DBG.write("test_015 str", rrt) - self.assertIn("20", rrt) # 2018 to 2099 ok - self.assertIn("-", rrt) - self.assertIn(":", rrt) - rrt = repr(t) - DBG.write("test_015 repr", rrt) - self.assertIn("DateTime", rrt) - self.assertIn("20", rrt) # 2018 to 2099 ok - self.assertIn("-", rrt) - self.assertIn(":", rrt) - - - def test_020(self): - t1 = DATT.DateTime("now") - t2 = DATT.DateTime(t1) - self.assertTrue(t2.isOk()) - self.assertEqual(t1, t2) - t2 = DATT.DateTime("now") - self.assertNotEqual(t1, t2) # microseconds differs - - DATT.sleep(3) # 3 second more - t2 = DATT.DateTime("now") - self.assertGreater(2, 1) # to be sure - self.assertGreater(str(t2), str(t1)) # seconds differs - self.assertGreater(repr(t2), repr(t1)) # seconds differs - self.assertGreater(t2, t1) - self.assertTrue(t2 > t1) - self.assertFalse(t2 == t1) - self.assertFalse(t2 < t1) - self.assertFalse(t2 <= t1) - - def test_040(self): - t1 = DATT.DateTime("now") - delta = DATT.DeltaTime(t1) - self.assertFalse(delta.isOk()) - self.assertIn("Undefined", delta.toSeconds()) - DBG.write("test_040 str", str(delta)) - DBG.write("test_040 repr", repr(delta)) - with self.assertRaises(Exception): - delta.raiseIfKo() - DATT.DateTime().raiseIfKo() - - def test_042(self): - t1 = DATT.DateTime("now") - DATT.sleep(3.1) # 3.1 second more - t2 = DATT.DateTime("now") - self.assertTrue(t2 > t1) - delta = DATT.DeltaTime(t1, t2) - self.assertGreater(delta.toSeconds(), 3) - self.assertEqual(int(delta.toSeconds()), 3) - DBG.write("test_042 str", str(delta)) - DBG.write("test_042 repr", repr(delta)) - delta2 = delta.raiseIfKo() - self.assertEqual(delta2.toSeconds(), delta.toSeconds()) - - def test_044(self): - for more in [0, 0.56789, 5.6789, 56.789, 61, 3661, 36061]: - t1 = DATT.DateTime("now") - t2 = DATT.DateTime(t1) - t2.addSeconds(more) - delta = DATT.DeltaTime(t1, t2) - r = delta.toStrHuman() - DBG.write("test_044 str", r) - if more < 60: - self.assertIn("s", r) - self.assertNotIn("m", r) - self.assertNotIn("h", r) - continue - if more < 3600: - self.assertIn("s", r) - self.assertIn("m", r) - self.assertNotIn("h", r) - else: - self.assertIn("s", r) - self.assertIn("m", r) - self.assertIn("h", r)""" diff --git a/test/test_025_pyconf.py b/test/test_025_pyconf.py deleted file mode 100755 index 69c8f22..0000000 --- a/test/test_025_pyconf.py +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/env python -#-*- coding:utf-8 -*- - -# Copyright (C) 2010-2018 CEA/DEN -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import os -import sys -import unittest - -import initializeTest # set PATH etc for test - -import src.debug as DBG # Easy print stderr (for DEBUG only) -import src.pyconf as PYF # 0.3.7 -import config_0_3_9.config as PYF9 # TODO 0.3.9 - -_EXAMPLES = { -1 : """\ - messages: - [ - { - stream : "sys.stderr" # modified - message: 'Welcome' - name: 'Harry' - } - { - stream : "sys.stdout" # modified - message: 'Welkom' - name: 'Ruud' - } - { - stream : $messages[0].stream - message: 'Bienvenue' - name: "Yves" - } - ] -""", - -2 : """\ - aa: 111 - bb: $aa + 222 -""", - -3 : """\ - aa: Yves - bb: "Herve" # avoid Hervé -> 'utf8' codec can't decode byte -""", - -4 : """\ - aa: Yves - bb: "Hervé" # avoid Hervé -> 'utf8' codec can't decode byte -""", - -5 : """\ - aa: Yves - bb: "Herve" - cc: [ - cc1 - cc2 - cc3 - $bb + " hello" - ] - dd: { - d1 : dd11 - d2 : dd22 - d3 : dd33 - d4 : $bb + " bye" - } -""", - -# error circular -6 : """\ - aa: Yves - bb: $cc - cc: $bb -""", - -7 : """\ - aa: Yves - bb: $cc - cc: [ - cc1 - $bb - ] -""", - -8 : """\ - aa: Yves - bb: $cc - cc: { - cc1: cc11 - cc2: $bb - } -""", - -} - - -class TestCase(unittest.TestCase): - "Test the pyconf.py""" - - def test_000(self): - # one shot setUp() for this TestCase - # DBG.push_debug(True) - # SAT.setNotLocale() # test english - return - - def test_010(self): - # pyconf.py doc example 0.3.7 - # https://www.red-dove.com/config-doc/ is 0.3.9 ! - # which, when run, would yield the console output: - - expected = """\ -Welcome, Harry -Welkom, Ruud -Bienvenue, Yves -""" - inStream = DBG.InStream(_EXAMPLES[1]) - cfg = PYF.Config(inStream) - res = '' - for m in cfg.messages: - res += '%s, %s\n' % (m.message, m.name) - self.assertEqual(res, expected) - outStream = DBG.OutStream() - cfg.__save__(outStream) # sat renamed save() in __save__() - res = outStream.value - DBG.write("test_010 cfg", res) - self.assertTrue("name : 'Harry'" in res) - self.assertTrue("name : 'Ruud'" in res) - self.assertTrue("name : 'Yves'" in res) - - def test_020(self): - cfg = PYF.Config() - self.assertEqual(str(cfg), '{}') - self.assertEqual(cfg.__repr__(), '{}') - cfg.aa = "1111" - self.assertEqual(str(cfg), "{'aa': '1111'}") - cfg.bb = 2222 - self.assertTrue("'bb': 2222" in str(cfg)) - self.assertTrue("'aa': '1111'" in str(cfg)) - cfg.cc = 3333. - self.assertTrue("'cc': 3333." in str(cfg)) - - def test_030(self): - inStream = DBG.InStream(_EXAMPLES[2]) - cfg = PYF.Config(inStream) - self.assertEqual(str(cfg), "{'aa': 111, 'bb': $aa + 222}") - self.assertEqual(cfg.aa, 111) - self.assertEqual(cfg.bb, 333) - - def test_040(self): - inStream = DBG.InStream(_EXAMPLES[3]) - cfg = PYF.Config(inStream) - self.assertEqual(cfg.aa, "Yves") - self.assertEqual(cfg.bb, "Herve") - self.assertEqual(type(cfg.bb), str) - cfg.bb = "Hervé" # try this - self.assertEqual(type(cfg.bb), str) - self.assertEqual(cfg.bb, "Hervé") - - def test_045(self): - # make Hervé valid with pyconf.py as 0.3.9 - inStream = DBG.InStream(_EXAMPLES[4]) - outStream = DBG.OutStream() - cfg = PYF9.Config(inStream) - cfg.save(outStream) # OK - # TODO: cfg = PYF.Config(inStream) - # cfg.__save__(outStream) # KO and sat renamed save() in __save__() - res = outStream.value - DBG.write("test_045 cfg", res) - self.assertTrue("aa : 'Yves'" in res) - self.assertTrue(r"bb : 'Herv\xc3\xa9'" in res) - self.assertEqual(cfg.bb, "Hervé") - - def test_100(self): - inStream = DBG.InStream(_EXAMPLES[5]) - outStream = DBG.OutStream() - cfg = PYF.Config(inStream) # KO - cfg.__save__(outStream) # sat renamed save() in __save__() - res = outStream.value - DBG.write("test_100 cfg save", res) - DBG.write("test_100 cfg debug", cfg) - DBG.write("test_100 cfg.cc debug", cfg.cc) - - cc = cfg.cc - # DBG.write("test_100 type cc[3]", dir(cc), True) - DBG.write("test_100 cc", [cc.data[i] for i in range(len(cc))]) - - def test_100(self): - inStream = DBG.InStream(_EXAMPLES[5]) - outStream = DBG.OutStream() - cfg = PYF.Config(inStream) # KO - cfg.__save__(outStream) # sat renamed save() in __save__() - res = outStream.value - DBG.write("test_100 cfg save", res) - DBG.write("test_100 cfg debug", cfg) - DBG.write("test_100 cfg.cc debug", cfg.cc) - - cc = cfg.cc - # DBG.write("test_100 type cc[3]", dir(cc), True) - DBG.write("test_100 cc", [cc.data[i] for i in range(len(cc))]) - - def test_110(self): - inStream = DBG.InStream(_EXAMPLES[6]) - outStream = DBG.OutStream() - cfg = PYF.Config(inStream) - cfg.__save__(outStream) - - res = outStream.value - DBG.write("test_110 cfg save", res) - self.assertNotIn("ERROR", res) - - res = DBG.getStrConfigDbg(cfg) - DBG.write("test_110 cfg debug", res) - self.assertIn("ERROR", res) - self.assertIn("unable to evaluate $cc", res) - self.assertIn("unable to evaluate $bb", res) - - def test_120(self): - for ii in [7, 8]: - inStream = DBG.InStream(_EXAMPLES[ii]) - outStream = DBG.OutStream() - cfg = PYF.Config(inStream) - cfg.__save__(outStream) - - res = outStream.value - DBG.write("test_120 cfg save", res, True) - self.assertNotIn("ERROR", res) - - res = DBG.getStrConfigDbg(cfg) - DBG.write("test_120 cfg debug", res, True) - # no error circular !!! - # self.assertIn("ERROR", res) # no error circular !!! - # self.assertIn("unable to evaluate $cc", res) - # self.assertIn("unable to evaluate $bb", res) - res = cfg.bb - DBG.write("test_120 cfg.bb debug", res, True) - - res = cfg.cc - DBG.write("test_120 cfg.cc debug", res, True) - - def test_999(self): - # one shot tearDown() for this TestCase - # SAT.setLocale() # end test english - # DBG.pop_debug() - return - -if __name__ == '__main__': - unittest.main(exit=False) - pass diff --git a/test/test_030_pyconf_0_3_9.py b/test/test_030_pyconf_0_3_9.py deleted file mode 100755 index 88994ae..0000000 --- a/test/test_030_pyconf_0_3_9.py +++ /dev/null @@ -1,461 +0,0 @@ -#!/usr/bin/env python -#-*- coding:utf-8 -*- - -# Copyright 2004-2010 by Vinay Sajip. All Rights Reserved. -# -# Permission to use, copy, modify, and distribute this software and its -# documentation for any purpose and without fee is hereby granted, -# provided that the above copyright notice appear in all copies and that -# both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of Vinay Sajip -# not be used in advertising or publicity pertaining to distribution -# of the software without specific, written prior permission. -# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -""" -Test harness for the configuration module 'config' for Python. - -from test_config 0.3.9 modified to test 0.3.7.1 -this test obviously have FAILED (errors=6), -TODO, fix upgrading 0.3.9, or not. -""" - -import unittest -# import test_support - -import initializeTest # set PATH etc for test - -import src.pyconf as config -from src.pyconf import Config, ConfigMerger, ConfigList -from src.pyconf import ConfigError, ConfigFormatError, ConfigResolutionError -import logging -from StringIO import StringIO - -STREAMS = { - "simple_1" : -""" -message: 'Hello, world!' -""", - "malformed_1" : -""" -123 -""", - "malformed_2" : -""" -[ 123, 'abc' ] -""", - "malformed_3" : -""" -{ a : 7, b : 1.3, c : 'test' } -""", - "malformed_4" : -""" -test: $a [7] # note space before bracket -""", - "malformed_5" : -""" -test: 'abc' -test: 'def' -""", - "wellformed_1" : -""" -test: $a[7] # note no space before bracket -""", - "boolean_1": -""" -test : False -another_test: True -""", - "boolean_2": -""" -test : false -another_test: true -""", - "none_1": -""" -test : None -""", - "none_2": -""" -test : none -""", - "number_1": -""" -root: 1 -stream: 1.7 -neg: -1 -negfloat: -2.0 -posexponent: 2.0999999e-08 -negexponent: -2.0999999e-08 -exponent: 2.0999999e08 -""", - "sequence_1": -""" -mixed: [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ] -simple: [1, 2] -nested: [1, [2, 3], [4, [5, 6]]] -""", - "include_1": -""" -included: @'include_2' -""", - "include_2": -""" -test: 123 -another_test: 'abc' -""", - "expr_1": -""" -value1 : 10 -value2 : 5 -value3 : 'abc' -value4 : 'ghi' -value5 : 0 -value6 : { 'a' : $value1, 'b': $value2 } -derived1 : $value1 + $value2 -derived2 : $value1 - $value2 -derived3 : $value1 * $value2 -derived4 : $value1 / $value2 -derived5 : $value1 % $value2 -derived6 : $value3 + $value4 -derived7 : $value3 + 'def' + $value4 -derived8 : $value3 - $value4 # meaningless -derived9 : $value1 / $value5 # div by zero -derived10 : $value1 % $value5 # div by zero -derived11 : $value17 # doesn't exist -derived12 : $value6.a + $value6.b -""", - "eval_1": -""" -stderr : `sys.stderr` -stdout : `sys.stdout` -stdin : `sys.stdin` -debug : `debug` -DEBUG : `DEBUG` -derived: $DEBUG * 10 -""", - "merge_1": -""" -value1: True -value3: [1, 2, 3] -value5: [ 7 ] -value6: { 'a' : 1, 'c' : 3 } -""", - "merge_2": -""" -value2: False -value4: [4, 5, 6] -value5: ['abc'] -value6: { 'b' : 2, 'd' : 4 } -""", - "merge_3": -""" -value1: True -value2: 3 -value3: [1, 3, 5] -value4: [1, 3, 5] -""", - "merge_4": -""" -value1: False -value2: 4 -value3: [2, 4, 6] -value4: [2, 4, 6] -""", - "list_1": -""" -verbosity : 1 -""", - "list_2": -""" -verbosity : 2 -program_value: 4 -""", - "list_3": -""" -verbosity : 3 -suite_value: 5 -""", - "get_1": -""" -value1 : 123 -value2 : 'abcd' -value3 : True -value4 : None -value5: -{ - value1 : 123 - value2 : 'abcd' - value3 : True - value4 : None -} -""", - "multiline_1": -""" -value1: '''Value One -Value Two -''' -value2: \"\"\"Value Three -Value Four\"\"\" -""" -} - -def makeStream(name): - s = StringIO(STREAMS[name]) - s.name = name - return s - -class OutStream(StringIO): - def close(self): - self.value = self.getvalue() - StringIO.close(self) - -class TestConfig(unittest.TestCase): - - def setUp(self): - self.cfg = Config(None) - - def tearDown(self): - del self.cfg - - def test_010(self): # Creation(self): - self.assertEqual(0, len(self.cfg)) # should be empty - - def test_020(self): # Simple(self): - self.cfg.load(makeStream("simple_1")) - self.failUnless('message' in self.cfg) - self.failIf('root' in self.cfg) - self.failIf('stream' in self.cfg) - self.failIf('load' in self.cfg) - self.failIf('__save__' in self.cfg) - - def test_030(self): # ValueOnly(self): - self.assertRaises(ConfigError, self.cfg.load, - makeStream("malformed_1")) - self.assertRaises(ConfigError, self.cfg.load, - makeStream("malformed_2")) - self.assertRaises(ConfigError, self.cfg.load, - makeStream("malformed_3")) - - def test_040(self): # BadBracket(self): - self.assertRaises(ConfigError, self.cfg.load, - makeStream("malformed_4")) - - def test_050(self): # Duplicate(self): - self.assertRaises(ConfigError, self.cfg.load, - makeStream("malformed_5")) - - def test_060(self): # GoodBracket(self): - self.cfg.load(makeStream("wellformed_1")) - - def test_070(self): # Boolean(self): - self.cfg.load(makeStream("boolean_1")) - self.assertEqual(True, self.cfg.another_test) - self.assertEqual(False, self.cfg.test) - - def test_080(self): # NotBoolean(self): - self.cfg.load(makeStream("boolean_2")) - self.assertEqual('true', self.cfg.another_test) - self.assertEqual('false', self.cfg.test) - - def test_090(self): # None(self): - self.cfg.load(makeStream("none_1")) - self.assertEqual(None, self.cfg.test) - - def test_100(self): # NotNone(self): - self.cfg.load(makeStream("none_2")) - self.assertEqual('none', self.cfg.test) - - def test_110(self): # Number(self): - self.cfg.load(makeStream("number_1")) - self.assertEqual(1, self.cfg.root) - self.assertEqual(1.7, self.cfg.stream) - self.assertEqual(-1, self.cfg.neg) - self.assertEqual(-2.0, self.cfg.negfloat) - self.assertAlmostEqual(-2.0999999e-08, self.cfg.negexponent) - self.assertAlmostEqual(2.0999999e-08, self.cfg.posexponent) - self.assertAlmostEqual(2.0999999e08, self.cfg.exponent) - - def test_120(self): # Change(self): - self.cfg.load(makeStream("simple_1")) - self.cfg.message = 'Goodbye, cruel world!' - self.assertEqual('Goodbye, cruel world!', self.cfg.message) - - def test_130(self): # Save(self): - self.cfg.load(makeStream("simple_1")) - self.cfg.message = 'Goodbye, cruel world!' - out = OutStream() - self.cfg.__save__(out) - self.assertEqual("message : 'Goodbye, cruel world!'" + config.NEWLINE, - out.value) - - def test_140(self): # Include(self): - config.streamOpener = makeStream - self.cfg = Config("include_1") - config.streamOpener = config.defaultStreamOpener - out = OutStream() - self.cfg.__save__(out) - s = "included :%s{%s test : 123%s another_test : 'abc'%s}%s" % (5 * - (config.NEWLINE,)) - self.assertEqual(s, out.value) - - def test_150(self): # Expression(self): - self.cfg.load(makeStream("expr_1")) - self.assertEqual(15, self.cfg.derived1) - self.assertEqual(5, self.cfg.derived2) - self.assertEqual(50, self.cfg.derived3) - self.assertEqual(2, self.cfg.derived4) - self.assertEqual(0, self.cfg.derived5) - self.assertEqual('abcghi', self.cfg.derived6) - self.assertEqual('abcdefghi', self.cfg.derived7) - self.assertRaises(TypeError, lambda x: x.derived8, self.cfg) - self.assertRaises(ZeroDivisionError, lambda x: x.derived9, self.cfg) - self.assertRaises(ZeroDivisionError, lambda x: x.derived10, self.cfg) - self.assertRaises(ConfigResolutionError, - lambda x: x.derived11, self.cfg) - self.assertEqual(15, self.cfg.derived12) - - def test_160(self): # Eval(self): - import sys, logging - self.cfg.load(makeStream("eval_1")) - self.assertEqual(sys.stderr, self.cfg.stderr) - self.assertEqual(sys.stdout, self.cfg.stdout) - self.assertEqual(sys.stdin, self.cfg.stdin) - self.assertRaises(ConfigResolutionError, lambda x: x.debug, self.cfg) - self.cfg.addNamespace(logging.Logger) - self.assertEqual(logging.Logger.debug.im_func, self.cfg.debug) - self.assertRaises(ConfigResolutionError, lambda x: x.DEBUG, self.cfg) - self.cfg.addNamespace(logging) - self.assertEqual(logging.DEBUG, self.cfg.DEBUG) - self.cfg.removeNamespace(logging.Logger) - self.assertEqual(logging.debug, self.cfg.debug) - self.assertEqual(logging.DEBUG * 10, self.cfg.derived) - - def test_170(self): # Functions(self): - makePath = config.makePath - isWord = config.isWord - self.assertEqual('suffix', makePath('', 'suffix')) - self.assertEqual('suffix', makePath(None, 'suffix')) - self.assertEqual('prefix.suffix', makePath('prefix', 'suffix')) - self.assertEqual('prefix[1]', makePath('prefix', '[1]')) - self.failUnless(isWord('a9')) - self.failUnless(isWord('9a')) #perverse, but there you go - self.failIf(isWord(9)) - self.failIf(isWord(None)) - self.failIf(isWord(self)) - self.failIf(isWord('')) - - def test_180(self): # Merge(self): - cfg1 = Config() - cfg1.load(makeStream("merge_1")) - cfg2 = Config(makeStream("merge_2")) - ConfigMerger().merge(cfg1, cfg2) - merged = cfg1 - cfg1 = Config() - cfg1.load(makeStream("merge_1")) - for i in xrange(0, 5): - key = 'value%d' % (i + 1,) - self.failUnless(key in merged) - self.assertEqual(len(cfg1.value5) + len(cfg2.value5), - len(merged.value5)) - cfg3 = Config() - cfg3.load(makeStream("merge_3")) - cfg4 = Config(makeStream("merge_4")) - merger = ConfigMerger() - self.assertRaises(ConfigError, merger.merge, cfg3, cfg4) - - cfg3 = Config(makeStream("merge_3")) - cfg4 = Config(makeStream("merge_4")) - merger = ConfigMerger(config.overwriteMergeResolve) - merger.merge(cfg3, cfg4) - self.assertEqual(False, cfg3['value1']) - self.assertEqual(4, cfg3['value2']) - - def customMergeResolve(map1, map2, key): - if key == "value3": - rv = "overwrite" - else: - rv = config.overwriteMergeResolve(map1, map2, key) - return rv - - cfg3 = Config(makeStream("merge_3")) - cfg4 = Config(makeStream("merge_4")) - merger = ConfigMerger(customMergeResolve) - merger.merge(cfg3, cfg4) - self.assertEqual("[2, 4, 6]", str(cfg3.value3)) - self.assertEqual("[1, 3, 5, 2, 4, 6]", str(cfg3.value4)) - - def test_190(self): # List(self): - list = ConfigList() - list.append(Config(makeStream("list_1"))) - list.append(Config(makeStream("list_2"))) - list.append(Config(makeStream("list_3"))) - self.assertEqual(1, list.getByPath('verbosity')) - self.assertEqual(4, list.getByPath('program_value')) - self.assertEqual(5, list.getByPath('suite_value')) - self.assertRaises(ConfigError, list.getByPath, 'nonexistent_value') - - def test_200(self): # Get(self): - cfg = self.cfg - cfg.load(makeStream("get_1")) - self.assertEqual(123, cfg.get('value1')) - self.assertEqual(123, cfg.get('value1', -123)) - self.assertEqual(-123, cfg.get('value11', -123)) - self.assertEqual('abcd', cfg.get('value2')) - self.failUnless(cfg.get('value3')) - self.failIf(cfg.get('value4') is not None) - self.assertEqual(123, cfg.value5.get('value1')) - self.assertEqual(123, cfg.value5.get('value1', -123)) - self.assertEqual(-123, cfg.value5.get('value11', -123)) - self.assertEqual('abcd', cfg.value5.get('value2')) - self.failUnless(cfg.value5.get('value3')) - self.failIf(cfg.value5.get('value4') is not None) - - def test_210(self): # Multiline(self): - cfg = self.cfg - cfg.load(makeStream("multiline_1")) - self.assertEqual("Value One\nValue Two\n", cfg.get('value1')) - self.assertEqual("Value Three\nValue Four", cfg.get('value2')) - - def test_220(self): # Sequence(self): - cfg = self.cfg - strm = makeStream("sequence_1") - cfg.load(strm) - self.assertEqual(str(cfg.simple), "[1, 2]") - self.assertEqual(str(cfg.nested), "[1, [2, 3], [4, [5, 6]]]") - self.assertEqual(str(cfg.mixed), "['VALIGN', [0, 0], [-1, -1], 'TOP']") - - def test_230(self): # JSON(self): - import os - curDir, tmp = os.path.split(__file__) - fileJson = os.path.join(curDir, 'config_0_3_9', 'styles.json') - data = StringIO('dummy: ' + open(fileJson, 'r').read()) - self.cfg.load(data) - -def init_logging(): - logging.basicConfig(level=logging.DEBUG, filename="test_config.log", - filemode="w", format="%(asctime)s %(levelname)-5s %(name)-10s %(message)s") -""" -def test_main(): - init_logging() - test_support.run_unittest(TestConfig) -""" - -if __name__ == "__main__": - # test_main() - unittest.main(exit=False) - import sys - sys.stderr.write(""" - -########################################################### -WARNING: this test obviously have 'FAILED (errors=6)', with config 0.3.7 -TODO: fix upgrading 0.3.9, (or not). -########################################################### -""") - pass - diff --git a/test/test_035_pyconf.py b/test/test_035_pyconf.py new file mode 100755 index 0000000..69c8f22 --- /dev/null +++ b/test/test_035_pyconf.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python +#-*- coding:utf-8 -*- + +# Copyright (C) 2010-2018 CEA/DEN +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import unittest + +import initializeTest # set PATH etc for test + +import src.debug as DBG # Easy print stderr (for DEBUG only) +import src.pyconf as PYF # 0.3.7 +import config_0_3_9.config as PYF9 # TODO 0.3.9 + +_EXAMPLES = { +1 : """\ + messages: + [ + { + stream : "sys.stderr" # modified + message: 'Welcome' + name: 'Harry' + } + { + stream : "sys.stdout" # modified + message: 'Welkom' + name: 'Ruud' + } + { + stream : $messages[0].stream + message: 'Bienvenue' + name: "Yves" + } + ] +""", + +2 : """\ + aa: 111 + bb: $aa + 222 +""", + +3 : """\ + aa: Yves + bb: "Herve" # avoid Hervé -> 'utf8' codec can't decode byte +""", + +4 : """\ + aa: Yves + bb: "Hervé" # avoid Hervé -> 'utf8' codec can't decode byte +""", + +5 : """\ + aa: Yves + bb: "Herve" + cc: [ + cc1 + cc2 + cc3 + $bb + " hello" + ] + dd: { + d1 : dd11 + d2 : dd22 + d3 : dd33 + d4 : $bb + " bye" + } +""", + +# error circular +6 : """\ + aa: Yves + bb: $cc + cc: $bb +""", + +7 : """\ + aa: Yves + bb: $cc + cc: [ + cc1 + $bb + ] +""", + +8 : """\ + aa: Yves + bb: $cc + cc: { + cc1: cc11 + cc2: $bb + } +""", + +} + + +class TestCase(unittest.TestCase): + "Test the pyconf.py""" + + def test_000(self): + # one shot setUp() for this TestCase + # DBG.push_debug(True) + # SAT.setNotLocale() # test english + return + + def test_010(self): + # pyconf.py doc example 0.3.7 + # https://www.red-dove.com/config-doc/ is 0.3.9 ! + # which, when run, would yield the console output: + + expected = """\ +Welcome, Harry +Welkom, Ruud +Bienvenue, Yves +""" + inStream = DBG.InStream(_EXAMPLES[1]) + cfg = PYF.Config(inStream) + res = '' + for m in cfg.messages: + res += '%s, %s\n' % (m.message, m.name) + self.assertEqual(res, expected) + outStream = DBG.OutStream() + cfg.__save__(outStream) # sat renamed save() in __save__() + res = outStream.value + DBG.write("test_010 cfg", res) + self.assertTrue("name : 'Harry'" in res) + self.assertTrue("name : 'Ruud'" in res) + self.assertTrue("name : 'Yves'" in res) + + def test_020(self): + cfg = PYF.Config() + self.assertEqual(str(cfg), '{}') + self.assertEqual(cfg.__repr__(), '{}') + cfg.aa = "1111" + self.assertEqual(str(cfg), "{'aa': '1111'}") + cfg.bb = 2222 + self.assertTrue("'bb': 2222" in str(cfg)) + self.assertTrue("'aa': '1111'" in str(cfg)) + cfg.cc = 3333. + self.assertTrue("'cc': 3333." in str(cfg)) + + def test_030(self): + inStream = DBG.InStream(_EXAMPLES[2]) + cfg = PYF.Config(inStream) + self.assertEqual(str(cfg), "{'aa': 111, 'bb': $aa + 222}") + self.assertEqual(cfg.aa, 111) + self.assertEqual(cfg.bb, 333) + + def test_040(self): + inStream = DBG.InStream(_EXAMPLES[3]) + cfg = PYF.Config(inStream) + self.assertEqual(cfg.aa, "Yves") + self.assertEqual(cfg.bb, "Herve") + self.assertEqual(type(cfg.bb), str) + cfg.bb = "Hervé" # try this + self.assertEqual(type(cfg.bb), str) + self.assertEqual(cfg.bb, "Hervé") + + def test_045(self): + # make Hervé valid with pyconf.py as 0.3.9 + inStream = DBG.InStream(_EXAMPLES[4]) + outStream = DBG.OutStream() + cfg = PYF9.Config(inStream) + cfg.save(outStream) # OK + # TODO: cfg = PYF.Config(inStream) + # cfg.__save__(outStream) # KO and sat renamed save() in __save__() + res = outStream.value + DBG.write("test_045 cfg", res) + self.assertTrue("aa : 'Yves'" in res) + self.assertTrue(r"bb : 'Herv\xc3\xa9'" in res) + self.assertEqual(cfg.bb, "Hervé") + + def test_100(self): + inStream = DBG.InStream(_EXAMPLES[5]) + outStream = DBG.OutStream() + cfg = PYF.Config(inStream) # KO + cfg.__save__(outStream) # sat renamed save() in __save__() + res = outStream.value + DBG.write("test_100 cfg save", res) + DBG.write("test_100 cfg debug", cfg) + DBG.write("test_100 cfg.cc debug", cfg.cc) + + cc = cfg.cc + # DBG.write("test_100 type cc[3]", dir(cc), True) + DBG.write("test_100 cc", [cc.data[i] for i in range(len(cc))]) + + def test_100(self): + inStream = DBG.InStream(_EXAMPLES[5]) + outStream = DBG.OutStream() + cfg = PYF.Config(inStream) # KO + cfg.__save__(outStream) # sat renamed save() in __save__() + res = outStream.value + DBG.write("test_100 cfg save", res) + DBG.write("test_100 cfg debug", cfg) + DBG.write("test_100 cfg.cc debug", cfg.cc) + + cc = cfg.cc + # DBG.write("test_100 type cc[3]", dir(cc), True) + DBG.write("test_100 cc", [cc.data[i] for i in range(len(cc))]) + + def test_110(self): + inStream = DBG.InStream(_EXAMPLES[6]) + outStream = DBG.OutStream() + cfg = PYF.Config(inStream) + cfg.__save__(outStream) + + res = outStream.value + DBG.write("test_110 cfg save", res) + self.assertNotIn("ERROR", res) + + res = DBG.getStrConfigDbg(cfg) + DBG.write("test_110 cfg debug", res) + self.assertIn("ERROR", res) + self.assertIn("unable to evaluate $cc", res) + self.assertIn("unable to evaluate $bb", res) + + def test_120(self): + for ii in [7, 8]: + inStream = DBG.InStream(_EXAMPLES[ii]) + outStream = DBG.OutStream() + cfg = PYF.Config(inStream) + cfg.__save__(outStream) + + res = outStream.value + DBG.write("test_120 cfg save", res, True) + self.assertNotIn("ERROR", res) + + res = DBG.getStrConfigDbg(cfg) + DBG.write("test_120 cfg debug", res, True) + # no error circular !!! + # self.assertIn("ERROR", res) # no error circular !!! + # self.assertIn("unable to evaluate $cc", res) + # self.assertIn("unable to evaluate $bb", res) + res = cfg.bb + DBG.write("test_120 cfg.bb debug", res, True) + + res = cfg.cc + DBG.write("test_120 cfg.cc debug", res, True) + + def test_999(self): + # one shot tearDown() for this TestCase + # SAT.setLocale() # end test english + # DBG.pop_debug() + return + +if __name__ == '__main__': + unittest.main(exit=False) + pass diff --git a/test/test_039_pyconf_0_3_9.py b/test/test_039_pyconf_0_3_9.py new file mode 100755 index 0000000..88994ae --- /dev/null +++ b/test/test_039_pyconf_0_3_9.py @@ -0,0 +1,461 @@ +#!/usr/bin/env python +#-*- coding:utf-8 -*- + +# Copyright 2004-2010 by Vinay Sajip. All Rights Reserved. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, +# provided that the above copyright notice appear in all copies and that +# both that copyright notice and this permission notice appear in +# supporting documentation, and that the name of Vinay Sajip +# not be used in advertising or publicity pertaining to distribution +# of the software without specific, written prior permission. +# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +""" +Test harness for the configuration module 'config' for Python. + +from test_config 0.3.9 modified to test 0.3.7.1 +this test obviously have FAILED (errors=6), +TODO, fix upgrading 0.3.9, or not. +""" + +import unittest +# import test_support + +import initializeTest # set PATH etc for test + +import src.pyconf as config +from src.pyconf import Config, ConfigMerger, ConfigList +from src.pyconf import ConfigError, ConfigFormatError, ConfigResolutionError +import logging +from StringIO import StringIO + +STREAMS = { + "simple_1" : +""" +message: 'Hello, world!' +""", + "malformed_1" : +""" +123 +""", + "malformed_2" : +""" +[ 123, 'abc' ] +""", + "malformed_3" : +""" +{ a : 7, b : 1.3, c : 'test' } +""", + "malformed_4" : +""" +test: $a [7] # note space before bracket +""", + "malformed_5" : +""" +test: 'abc' +test: 'def' +""", + "wellformed_1" : +""" +test: $a[7] # note no space before bracket +""", + "boolean_1": +""" +test : False +another_test: True +""", + "boolean_2": +""" +test : false +another_test: true +""", + "none_1": +""" +test : None +""", + "none_2": +""" +test : none +""", + "number_1": +""" +root: 1 +stream: 1.7 +neg: -1 +negfloat: -2.0 +posexponent: 2.0999999e-08 +negexponent: -2.0999999e-08 +exponent: 2.0999999e08 +""", + "sequence_1": +""" +mixed: [ "VALIGN", [ 0, 0 ], [ -1, -1 ], "TOP" ] +simple: [1, 2] +nested: [1, [2, 3], [4, [5, 6]]] +""", + "include_1": +""" +included: @'include_2' +""", + "include_2": +""" +test: 123 +another_test: 'abc' +""", + "expr_1": +""" +value1 : 10 +value2 : 5 +value3 : 'abc' +value4 : 'ghi' +value5 : 0 +value6 : { 'a' : $value1, 'b': $value2 } +derived1 : $value1 + $value2 +derived2 : $value1 - $value2 +derived3 : $value1 * $value2 +derived4 : $value1 / $value2 +derived5 : $value1 % $value2 +derived6 : $value3 + $value4 +derived7 : $value3 + 'def' + $value4 +derived8 : $value3 - $value4 # meaningless +derived9 : $value1 / $value5 # div by zero +derived10 : $value1 % $value5 # div by zero +derived11 : $value17 # doesn't exist +derived12 : $value6.a + $value6.b +""", + "eval_1": +""" +stderr : `sys.stderr` +stdout : `sys.stdout` +stdin : `sys.stdin` +debug : `debug` +DEBUG : `DEBUG` +derived: $DEBUG * 10 +""", + "merge_1": +""" +value1: True +value3: [1, 2, 3] +value5: [ 7 ] +value6: { 'a' : 1, 'c' : 3 } +""", + "merge_2": +""" +value2: False +value4: [4, 5, 6] +value5: ['abc'] +value6: { 'b' : 2, 'd' : 4 } +""", + "merge_3": +""" +value1: True +value2: 3 +value3: [1, 3, 5] +value4: [1, 3, 5] +""", + "merge_4": +""" +value1: False +value2: 4 +value3: [2, 4, 6] +value4: [2, 4, 6] +""", + "list_1": +""" +verbosity : 1 +""", + "list_2": +""" +verbosity : 2 +program_value: 4 +""", + "list_3": +""" +verbosity : 3 +suite_value: 5 +""", + "get_1": +""" +value1 : 123 +value2 : 'abcd' +value3 : True +value4 : None +value5: +{ + value1 : 123 + value2 : 'abcd' + value3 : True + value4 : None +} +""", + "multiline_1": +""" +value1: '''Value One +Value Two +''' +value2: \"\"\"Value Three +Value Four\"\"\" +""" +} + +def makeStream(name): + s = StringIO(STREAMS[name]) + s.name = name + return s + +class OutStream(StringIO): + def close(self): + self.value = self.getvalue() + StringIO.close(self) + +class TestConfig(unittest.TestCase): + + def setUp(self): + self.cfg = Config(None) + + def tearDown(self): + del self.cfg + + def test_010(self): # Creation(self): + self.assertEqual(0, len(self.cfg)) # should be empty + + def test_020(self): # Simple(self): + self.cfg.load(makeStream("simple_1")) + self.failUnless('message' in self.cfg) + self.failIf('root' in self.cfg) + self.failIf('stream' in self.cfg) + self.failIf('load' in self.cfg) + self.failIf('__save__' in self.cfg) + + def test_030(self): # ValueOnly(self): + self.assertRaises(ConfigError, self.cfg.load, + makeStream("malformed_1")) + self.assertRaises(ConfigError, self.cfg.load, + makeStream("malformed_2")) + self.assertRaises(ConfigError, self.cfg.load, + makeStream("malformed_3")) + + def test_040(self): # BadBracket(self): + self.assertRaises(ConfigError, self.cfg.load, + makeStream("malformed_4")) + + def test_050(self): # Duplicate(self): + self.assertRaises(ConfigError, self.cfg.load, + makeStream("malformed_5")) + + def test_060(self): # GoodBracket(self): + self.cfg.load(makeStream("wellformed_1")) + + def test_070(self): # Boolean(self): + self.cfg.load(makeStream("boolean_1")) + self.assertEqual(True, self.cfg.another_test) + self.assertEqual(False, self.cfg.test) + + def test_080(self): # NotBoolean(self): + self.cfg.load(makeStream("boolean_2")) + self.assertEqual('true', self.cfg.another_test) + self.assertEqual('false', self.cfg.test) + + def test_090(self): # None(self): + self.cfg.load(makeStream("none_1")) + self.assertEqual(None, self.cfg.test) + + def test_100(self): # NotNone(self): + self.cfg.load(makeStream("none_2")) + self.assertEqual('none', self.cfg.test) + + def test_110(self): # Number(self): + self.cfg.load(makeStream("number_1")) + self.assertEqual(1, self.cfg.root) + self.assertEqual(1.7, self.cfg.stream) + self.assertEqual(-1, self.cfg.neg) + self.assertEqual(-2.0, self.cfg.negfloat) + self.assertAlmostEqual(-2.0999999e-08, self.cfg.negexponent) + self.assertAlmostEqual(2.0999999e-08, self.cfg.posexponent) + self.assertAlmostEqual(2.0999999e08, self.cfg.exponent) + + def test_120(self): # Change(self): + self.cfg.load(makeStream("simple_1")) + self.cfg.message = 'Goodbye, cruel world!' + self.assertEqual('Goodbye, cruel world!', self.cfg.message) + + def test_130(self): # Save(self): + self.cfg.load(makeStream("simple_1")) + self.cfg.message = 'Goodbye, cruel world!' + out = OutStream() + self.cfg.__save__(out) + self.assertEqual("message : 'Goodbye, cruel world!'" + config.NEWLINE, + out.value) + + def test_140(self): # Include(self): + config.streamOpener = makeStream + self.cfg = Config("include_1") + config.streamOpener = config.defaultStreamOpener + out = OutStream() + self.cfg.__save__(out) + s = "included :%s{%s test : 123%s another_test : 'abc'%s}%s" % (5 * + (config.NEWLINE,)) + self.assertEqual(s, out.value) + + def test_150(self): # Expression(self): + self.cfg.load(makeStream("expr_1")) + self.assertEqual(15, self.cfg.derived1) + self.assertEqual(5, self.cfg.derived2) + self.assertEqual(50, self.cfg.derived3) + self.assertEqual(2, self.cfg.derived4) + self.assertEqual(0, self.cfg.derived5) + self.assertEqual('abcghi', self.cfg.derived6) + self.assertEqual('abcdefghi', self.cfg.derived7) + self.assertRaises(TypeError, lambda x: x.derived8, self.cfg) + self.assertRaises(ZeroDivisionError, lambda x: x.derived9, self.cfg) + self.assertRaises(ZeroDivisionError, lambda x: x.derived10, self.cfg) + self.assertRaises(ConfigResolutionError, + lambda x: x.derived11, self.cfg) + self.assertEqual(15, self.cfg.derived12) + + def test_160(self): # Eval(self): + import sys, logging + self.cfg.load(makeStream("eval_1")) + self.assertEqual(sys.stderr, self.cfg.stderr) + self.assertEqual(sys.stdout, self.cfg.stdout) + self.assertEqual(sys.stdin, self.cfg.stdin) + self.assertRaises(ConfigResolutionError, lambda x: x.debug, self.cfg) + self.cfg.addNamespace(logging.Logger) + self.assertEqual(logging.Logger.debug.im_func, self.cfg.debug) + self.assertRaises(ConfigResolutionError, lambda x: x.DEBUG, self.cfg) + self.cfg.addNamespace(logging) + self.assertEqual(logging.DEBUG, self.cfg.DEBUG) + self.cfg.removeNamespace(logging.Logger) + self.assertEqual(logging.debug, self.cfg.debug) + self.assertEqual(logging.DEBUG * 10, self.cfg.derived) + + def test_170(self): # Functions(self): + makePath = config.makePath + isWord = config.isWord + self.assertEqual('suffix', makePath('', 'suffix')) + self.assertEqual('suffix', makePath(None, 'suffix')) + self.assertEqual('prefix.suffix', makePath('prefix', 'suffix')) + self.assertEqual('prefix[1]', makePath('prefix', '[1]')) + self.failUnless(isWord('a9')) + self.failUnless(isWord('9a')) #perverse, but there you go + self.failIf(isWord(9)) + self.failIf(isWord(None)) + self.failIf(isWord(self)) + self.failIf(isWord('')) + + def test_180(self): # Merge(self): + cfg1 = Config() + cfg1.load(makeStream("merge_1")) + cfg2 = Config(makeStream("merge_2")) + ConfigMerger().merge(cfg1, cfg2) + merged = cfg1 + cfg1 = Config() + cfg1.load(makeStream("merge_1")) + for i in xrange(0, 5): + key = 'value%d' % (i + 1,) + self.failUnless(key in merged) + self.assertEqual(len(cfg1.value5) + len(cfg2.value5), + len(merged.value5)) + cfg3 = Config() + cfg3.load(makeStream("merge_3")) + cfg4 = Config(makeStream("merge_4")) + merger = ConfigMerger() + self.assertRaises(ConfigError, merger.merge, cfg3, cfg4) + + cfg3 = Config(makeStream("merge_3")) + cfg4 = Config(makeStream("merge_4")) + merger = ConfigMerger(config.overwriteMergeResolve) + merger.merge(cfg3, cfg4) + self.assertEqual(False, cfg3['value1']) + self.assertEqual(4, cfg3['value2']) + + def customMergeResolve(map1, map2, key): + if key == "value3": + rv = "overwrite" + else: + rv = config.overwriteMergeResolve(map1, map2, key) + return rv + + cfg3 = Config(makeStream("merge_3")) + cfg4 = Config(makeStream("merge_4")) + merger = ConfigMerger(customMergeResolve) + merger.merge(cfg3, cfg4) + self.assertEqual("[2, 4, 6]", str(cfg3.value3)) + self.assertEqual("[1, 3, 5, 2, 4, 6]", str(cfg3.value4)) + + def test_190(self): # List(self): + list = ConfigList() + list.append(Config(makeStream("list_1"))) + list.append(Config(makeStream("list_2"))) + list.append(Config(makeStream("list_3"))) + self.assertEqual(1, list.getByPath('verbosity')) + self.assertEqual(4, list.getByPath('program_value')) + self.assertEqual(5, list.getByPath('suite_value')) + self.assertRaises(ConfigError, list.getByPath, 'nonexistent_value') + + def test_200(self): # Get(self): + cfg = self.cfg + cfg.load(makeStream("get_1")) + self.assertEqual(123, cfg.get('value1')) + self.assertEqual(123, cfg.get('value1', -123)) + self.assertEqual(-123, cfg.get('value11', -123)) + self.assertEqual('abcd', cfg.get('value2')) + self.failUnless(cfg.get('value3')) + self.failIf(cfg.get('value4') is not None) + self.assertEqual(123, cfg.value5.get('value1')) + self.assertEqual(123, cfg.value5.get('value1', -123)) + self.assertEqual(-123, cfg.value5.get('value11', -123)) + self.assertEqual('abcd', cfg.value5.get('value2')) + self.failUnless(cfg.value5.get('value3')) + self.failIf(cfg.value5.get('value4') is not None) + + def test_210(self): # Multiline(self): + cfg = self.cfg + cfg.load(makeStream("multiline_1")) + self.assertEqual("Value One\nValue Two\n", cfg.get('value1')) + self.assertEqual("Value Three\nValue Four", cfg.get('value2')) + + def test_220(self): # Sequence(self): + cfg = self.cfg + strm = makeStream("sequence_1") + cfg.load(strm) + self.assertEqual(str(cfg.simple), "[1, 2]") + self.assertEqual(str(cfg.nested), "[1, [2, 3], [4, [5, 6]]]") + self.assertEqual(str(cfg.mixed), "['VALIGN', [0, 0], [-1, -1], 'TOP']") + + def test_230(self): # JSON(self): + import os + curDir, tmp = os.path.split(__file__) + fileJson = os.path.join(curDir, 'config_0_3_9', 'styles.json') + data = StringIO('dummy: ' + open(fileJson, 'r').read()) + self.cfg.load(data) + +def init_logging(): + logging.basicConfig(level=logging.DEBUG, filename="test_config.log", + filemode="w", format="%(asctime)s %(levelname)-5s %(name)-10s %(message)s") +""" +def test_main(): + init_logging() + test_support.run_unittest(TestConfig) +""" + +if __name__ == "__main__": + # test_main() + unittest.main(exit=False) + import sys + sys.stderr.write(""" + +########################################################### +WARNING: this test obviously have 'FAILED (errors=6)', with config 0.3.7 +TODO: fix upgrading 0.3.9, (or not). +########################################################### +""") + pass +