예제 #1
0
    def test_allow_all_writes(self):
        ns = GlobalNamespace(allowed_variables=VARIABLES)

        with ns.allow_all_writes() as d:
            d['foo'] = True
            self.assertTrue(d['foo'])

        with self.assertRaises(KeyError) as ke:
            ns['bar'] = False

        self.assertEqual(ke.exception.args[1], 'set_unknown')

        ns['DIRS'] = []
        with self.assertRaisesRegexp(Exception, 'Reassigning .* is forbidden') as ke:
            ns['DIRS'] = []

        with ns.allow_all_writes() as d:
            d['DIST_SUBDIR'] = 'foo'

        self.assertEqual(ns['DIST_SUBDIR'], 'foo')
        ns['DIST_SUBDIR'] = 'bar'
        self.assertEqual(ns['DIST_SUBDIR'], 'bar')
        with self.assertRaisesRegexp(Exception, 'Reassigning .* is forbidden') as ke:
            ns['DIST_SUBDIR'] = 'baz'

        self.assertTrue(d['foo'])
예제 #2
0
    def test_allow_all_writes(self):
        ns = GlobalNamespace(allowed_variables=VARIABLES)

        with ns.allow_all_writes() as d:
            d['foo'] = True
            self.assertTrue(d['foo'])

        with self.assertRaises(KeyError) as ke:
            ns['bar'] = False

        self.assertEqual(ke.exception.args[1], 'set_unknown')

        ns['DIRS'] = []
        with self.assertRaisesRegexp(Exception,
                                     'Reassigning .* is forbidden') as ke:
            ns['DIRS'] = []

        with ns.allow_all_writes() as d:
            d['DIST_SUBDIR'] = 'foo'

        self.assertEqual(ns['DIST_SUBDIR'], 'foo')
        ns['DIST_SUBDIR'] = 'bar'
        self.assertEqual(ns['DIST_SUBDIR'], 'bar')
        with self.assertRaisesRegexp(Exception,
                                     'Reassigning .* is forbidden') as ke:
            ns['DIST_SUBDIR'] = 'baz'

        self.assertTrue(d['foo'])
예제 #3
0
    def test_allow_all_writes(self):
        ns = GlobalNamespace(allowed_variables=VARIABLES)

        with ns.allow_all_writes() as d:
            d['foo'] = True
            self.assertTrue(d['foo'])

        with self.assertRaises(KeyError) as ke:
            ns['foo'] = False

        self.assertEqual(ke.exception.args[1], 'set_unknown')

        self.assertTrue(d['foo'])
예제 #4
0
    def test_key_checking(self):
        # Checking for existence of a key should not populate the key if it
        # doesn't exist.
        g = GlobalNamespace(allowed_variables=VARIABLES)

        self.assertFalse('DIRS' in g)
        self.assertFalse('DIRS' in g)
예제 #5
0
    def test_allowed_set(self):
        self.assertIn('DIRS', VARIABLES)

        ns = GlobalNamespace(allowed_variables=VARIABLES)

        ns['DIRS'] = ['foo']
        self.assertEqual(ns['DIRS'], ['foo'])
예제 #6
0
    def test_global_proxy_writes(self):
        g = GlobalNamespace(allowed_variables=VARIABLES)
        l = LocalNamespace(g)

        l['DIRS'] = ['foo']

        self.assertEqual(l['DIRS'], ['foo'])
        self.assertEqual(g['DIRS'], ['foo'])
예제 #7
0
    def test_locals(self):
        g = GlobalNamespace(allowed_variables=VARIABLES)
        l = LocalNamespace(g)

        l['foo'] = ['foo']
        self.assertEqual(l['foo'], ['foo'])

        l['foo'] += ['bar']
        self.assertEqual(l['foo'], ['foo', 'bar'])
예제 #8
0
    def test_value_checking(self):
        ns = GlobalNamespace(allowed_variables=VARIABLES)

        # Setting to a non-allowed type should not work.
        with self.assertRaises(ValueError) as ve:
            ns['DIRS'] = True

        e = ve.exception.args
        self.assertEqual(e[0], 'global_ns')
        self.assertEqual(e[1], 'set_type')
        self.assertEqual(e[2], 'DIRS')
        self.assertTrue(e[3])
        self.assertEqual(e[4], list)
예제 #9
0
    def test_global_proxy_reads(self):
        g = GlobalNamespace(allowed_variables=VARIABLES)
        g['DIRS'] = ['foo']

        l = LocalNamespace(g)

        self.assertEqual(l['DIRS'], g['DIRS'])

        # Reads to missing UPPERCASE vars should result in KeyError.
        with self.assertRaises(KeyError) as ke:
            v = l['FOO']

        e = ke.exception
        self.assertEqual(e.args[0], 'global_ns')
        self.assertEqual(e.args[1], 'get_unknown')
예제 #10
0
    def test_key_rejection(self):
        # Lowercase keys should be rejected during normal operation.
        ns = GlobalNamespace(allowed_variables=VARIABLES)

        with self.assertRaises(KeyError) as ke:
            ns['foo'] = True

        e = ke.exception.args
        self.assertEqual(e[0], 'global_ns')
        self.assertEqual(e[1], 'set_unknown')
        self.assertEqual(e[2], 'foo')
        self.assertTrue(e[3])

        # Unknown uppercase keys should be rejected.
        with self.assertRaises(KeyError) as ke:
            ns['FOO'] = True

        e = ke.exception.args
        self.assertEqual(e[0], 'global_ns')
        self.assertEqual(e[1], 'set_unknown')
        self.assertEqual(e[2], 'FOO')
        self.assertTrue(e[3])
예제 #11
0
    def test_builtins(self):
        ns = GlobalNamespace()

        self.assertIn('__builtins__', ns)
        self.assertEqual(ns['__builtins__']['True'], True)