def test_In(self): c = ConfigBlock() c.declare('a', ConfigValue(None, In([1,3,5]))) self.assertEqual(c.a, None) c.a = 3 self.assertEqual(c.a, 3) with self.assertRaises(ValueError): c.a = 2 self.assertEqual(c.a, 3) with self.assertRaises(ValueError): c.a = {} self.assertEqual(c.a, 3) with self.assertRaises(ValueError): c.a = '1' self.assertEqual(c.a, 3) c.declare('b', ConfigValue(None, In([1,3,5], int))) self.assertEqual(c.b, None) c.b = 3 self.assertEqual(c.b, 3) with self.assertRaises(ValueError): c.b = 2 self.assertEqual(c.b, 3) with self.assertRaises(ValueError): c.b = {} self.assertEqual(c.b, 3) c.b = '1' self.assertEqual(c.b, 1)
def test_Path(self): def norm(x): if cwd[1] == ':' and x[0] == '/': x = cwd[:2] + x return x.replace('/',os.path.sep) cwd = os.getcwd() + os.path.sep c = ConfigBlock() c.declare('a', ConfigValue(None, Path())) self.assertEqual(c.a, None) c.a = "/a/b/c" self.assertTrue(os.path.sep in c.a) self.assertEqual(c.a, norm('/a/b/c')) c.a = "a/b/c" self.assertTrue(os.path.sep in c.a) self.assertEqual(c.a, norm(cwd+'a/b/c')) c.a = "${CWD}/a/b/c" self.assertTrue(os.path.sep in c.a) self.assertEqual(c.a, norm(cwd+'a/b/c')) c.a = None self.assertIs(c.a, None) c.declare('b', ConfigValue(None, Path('rel/path'))) self.assertEqual(c.b, None) c.b = "/a/b/c" self.assertTrue(os.path.sep in c.b) self.assertEqual(c.b, norm('/a/b/c')) c.b = "a/b/c" self.assertTrue(os.path.sep in c.b) self.assertEqual(c.b, norm(cwd+'rel/path/a/b/c')) c.b = "${CWD}/a/b/c" self.assertTrue(os.path.sep in c.b) self.assertEqual(c.b, norm(cwd+'a/b/c')) c.b = None self.assertIs(c.b, None) c.declare('c', ConfigValue(None, Path('/my/dir'))) self.assertEqual(c.c, None) c.c = "/a/b/c" self.assertTrue(os.path.sep in c.c) self.assertEqual(c.c, norm('/a/b/c')) c.c = "a/b/c" self.assertTrue(os.path.sep in c.c) self.assertEqual(c.c, norm('/my/dir/a/b/c')) c.c = "${CWD}/a/b/c" self.assertTrue(os.path.sep in c.c) self.assertEqual(c.c, norm(cwd+'a/b/c')) c.c = None self.assertIs(c.c, None) c.declare('d_base', ConfigValue("${CWD}", str)) c.declare('d', ConfigValue(None, Path(c.get('d_base')))) self.assertEqual(c.d, None) c.d = "/a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm('/a/b/c')) c.d = "a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm(cwd+'a/b/c')) c.d = "${CWD}/a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm(cwd+'a/b/c')) c.d_base = '/my/dir' c.d = "/a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm('/a/b/c')) c.d = "a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm('/my/dir/a/b/c')) c.d = "${CWD}/a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm(cwd+'a/b/c')) c.d_base = 'rel/path' c.d = "/a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm('/a/b/c')) c.d = "a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm(cwd+'rel/path/a/b/c')) c.d = "${CWD}/a/b/c" self.assertTrue(os.path.sep in c.d) self.assertEqual(c.d, norm(cwd+'a/b/c')) try: Path.SuppressPathExpansion = True c.d = "/a/b/c" self.assertTrue('/' in c.d) self.assertTrue('\\' not in c.d) self.assertEqual(c.d, '/a/b/c') c.d = "a/b/c" self.assertTrue('/' in c.d) self.assertTrue('\\' not in c.d) self.assertEqual(c.d, 'a/b/c') c.d = "${CWD}/a/b/c" self.assertTrue('/' in c.d) self.assertTrue('\\' not in c.d) self.assertEqual(c.d, "${CWD}/a/b/c") finally: Path.SuppressPathExpansion = False