def setUp(self):
     self.fp = FakeProperties(
         prop_str='a-string',
         prop_none=None,
         prop_list=['a', 'b'],
         prop_zero=0,
         prop_one=1,
         prop_false=False,
         prop_true=True,
         prop_empty='',
     )
     self.pm = PropertyMap(self.fp)
 def setUp(self):
     self.fp = FakeProperties(
         prop_str='a-string',
         prop_none=None,
         prop_list=['a', 'b'],
         prop_zero=0,
         prop_one=1,
         prop_false=False,
         prop_true=True,
         prop_empty='',
     )
     self.pm = PropertyMap(self.fp)
class TestPropertyMap(unittest.TestCase):
    def setUp(self):
        self.fp = FakeProperties(
            prop_str='a-string',
            prop_none=None,
            prop_list=['a', 'b'],
            prop_zero=0,
            prop_one=1,
            prop_false=False,
            prop_true=True,
            prop_empty='',
        )
        self.pm = PropertyMap(self.fp)

    def testSimpleStr(self):
        self.assertEqual(self.pm['prop_str'], 'a-string')

    def testSimpleNone(self):
        # None is special-cased to become an empty string
        self.assertEqual(self.pm['prop_none'], '')

    def testSimpleList(self):
        self.assertEqual(self.pm['prop_list'], ['a', 'b'])

    def testSimpleZero(self):
        self.assertEqual(self.pm['prop_zero'], 0)

    def testSimpleOne(self):
        self.assertEqual(self.pm['prop_one'], 1)

    def testSimpleFalse(self):
        self.assertEqual(self.pm['prop_false'], False)

    def testSimpleTrue(self):
        self.assertEqual(self.pm['prop_true'], True)

    def testSimpleEmpty(self):
        self.assertEqual(self.pm['prop_empty'], '')

    def testSimpleUnset(self):
        self.assertRaises(KeyError, lambda: self.pm['prop_nosuch'])

    def testColonMinusSet(self):
        self.assertEqual(self.pm['prop_str:-missing'], 'a-string')

    def testColonMinusNone(self):
        # None is special-cased here, too
        self.assertEqual(self.pm['prop_none:-missing'], '')

    def testColonMinusZero(self):
        self.assertEqual(self.pm['prop_zero:-missing'], 0)

    def testColonMinusOne(self):
        self.assertEqual(self.pm['prop_one:-missing'], 1)

    def testColonMinusFalse(self):
        self.assertEqual(self.pm['prop_false:-missing'], False)

    def testColonMinusTrue(self):
        self.assertEqual(self.pm['prop_true:-missing'], True)

    def testColonMinusEmpty(self):
        self.assertEqual(self.pm['prop_empty:-missing'], '')

    def testColonMinusUnset(self):
        self.assertEqual(self.pm['prop_nosuch:-missing'], 'missing')

    def testColonTildeSet(self):
        self.assertEqual(self.pm['prop_str:~missing'], 'a-string')

    def testColonTildeNone(self):
        # None is special-cased *differently* for ~:
        self.assertEqual(self.pm['prop_none:~missing'], 'missing')

    def testColonTildeZero(self):
        self.assertEqual(self.pm['prop_zero:~missing'], 'missing')

    def testColonTildeOne(self):
        self.assertEqual(self.pm['prop_one:~missing'], 1)

    def testColonTildeFalse(self):
        self.assertEqual(self.pm['prop_false:~missing'], 'missing')

    def testColonTildeTrue(self):
        self.assertEqual(self.pm['prop_true:~missing'], True)

    def testColonTildeEmpty(self):
        self.assertEqual(self.pm['prop_empty:~missing'], 'missing')

    def testColonTildeUnset(self):
        self.assertEqual(self.pm['prop_nosuch:~missing'], 'missing')

    def testColonPlusSet(self):
        self.assertEqual(self.pm['prop_str:+present'], 'present')

    def testColonPlusNone(self):
        self.assertEqual(self.pm['prop_none:+present'], 'present')

    def testColonPlusZero(self):
        self.assertEqual(self.pm['prop_zero:+present'], 'present')

    def testColonPlusOne(self):
        self.assertEqual(self.pm['prop_one:+present'], 'present')

    def testColonPlusFalse(self):
        self.assertEqual(self.pm['prop_false:+present'], 'present')

    def testColonPlusTrue(self):
        self.assertEqual(self.pm['prop_true:+present'], 'present')

    def testColonPlusEmpty(self):
        self.assertEqual(self.pm['prop_empty:+present'], 'present')

    def testColonPlusUnset(self):
        self.assertEqual(self.pm['prop_nosuch:+present'], '')

    def testNoTempValues(self):
        self.assertEqual(self.pm.temp_vals, {})

    def testClearTempValues(self):
        self.pm.add_temporary_value('prop_temp', 'present')
        self.pm.clear_temporary_values()
        self.assertEqual(self.pm.temp_vals, {})

    def testTempValue(self):
        self.pm.add_temporary_value('prop_temp', 'present')
        self.assertEqual(self.pm['prop_temp'], 'present')
        self.pm.clear_temporary_values()

    def testTempValueOverrides(self):
        self.pm.add_temporary_value('prop_one', 2)
        self.assertEqual(self.pm['prop_one'], 2)
        self.pm.clear_temporary_values()

    def testTempValueColonMinusSet(self):
        self.pm.add_temporary_value('prop_one', 2)
        self.assertEqual(self.pm['prop_one:-missing'], 2)
        self.pm.clear_temporary_values()

    def testTempValueColonMinusUnset(self):
        self.pm.add_temporary_value('prop_nosuch', 'temp')
        self.assertEqual(self.pm['prop_nosuch:-missing'], 'temp')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueSet(self):
        self.pm.add_temporary_value('prop_false', 'temp')
        self.assertEqual(self.pm['prop_false:~nontrue'], 'temp')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueUnset(self):
        self.pm.add_temporary_value('prop_nosuch', 'temp')
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'temp')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeFalseFalse(self):
        self.pm.add_temporary_value('prop_false', False)
        self.assertEqual(self.pm['prop_false:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueFalse(self):
        self.pm.add_temporary_value('prop_true', False)
        self.assertEqual(self.pm['prop_true:~nontrue'], True)
        self.pm.clear_temporary_values()

    def testTempValueColonTildeNoneFalse(self):
        self.pm.add_temporary_value('prop_nosuch', False)
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeFalseZero(self):
        self.pm.add_temporary_value('prop_false', 0)
        self.assertEqual(self.pm['prop_false:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueZero(self):
        self.pm.add_temporary_value('prop_true', 0)
        self.assertEqual(self.pm['prop_true:~nontrue'], True)
        self.pm.clear_temporary_values()

    def testTempValueColonTildeNoneZero(self):
        self.pm.add_temporary_value('prop_nosuch', 0)
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeFalseBlank(self):
        self.pm.add_temporary_value('prop_false', '')
        self.assertEqual(self.pm['prop_false:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueBlank(self):
        self.pm.add_temporary_value('prop_true', '')
        self.assertEqual(self.pm['prop_true:~nontrue'], True)
        self.pm.clear_temporary_values()

    def testTempValueColonTildeNoneBlank(self):
        self.pm.add_temporary_value('prop_nosuch', '')
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValuePlusSetSet(self):
        self.pm.add_temporary_value('prop_one', 2)
        self.assertEqual(self.pm['prop_one:+set'], 'set')
        self.pm.clear_temporary_values()

    def testTempValuePlusUnsetSet(self):
        self.pm.add_temporary_value('prop_nosuch', 1)
        self.assertEqual(self.pm['prop_nosuch:+set'], 'set')
class TestPropertyMap(unittest.TestCase):
    def setUp(self):
        self.fp = FakeProperties(
            prop_str='a-string',
            prop_none=None,
            prop_list=['a', 'b'],
            prop_zero=0,
            prop_one=1,
            prop_false=False,
            prop_true=True,
            prop_empty='',
        )
        self.pm = PropertyMap(self.fp)

    def testSimpleStr(self):
        self.assertEqual(self.pm['prop_str'], 'a-string')

    def testSimpleNone(self):
        # None is special-cased to become an empty string
        self.assertEqual(self.pm['prop_none'], '')

    def testSimpleList(self):
        self.assertEqual(self.pm['prop_list'], ['a', 'b'])

    def testSimpleZero(self):
        self.assertEqual(self.pm['prop_zero'], 0)

    def testSimpleOne(self):
        self.assertEqual(self.pm['prop_one'], 1)

    def testSimpleFalse(self):
        self.assertEqual(self.pm['prop_false'], False)

    def testSimpleTrue(self):
        self.assertEqual(self.pm['prop_true'], True)

    def testSimpleEmpty(self):
        self.assertEqual(self.pm['prop_empty'], '')

    def testSimpleUnset(self):
        self.assertRaises(KeyError, lambda : self.pm['prop_nosuch'])


    def testColonMinusSet(self):
        self.assertEqual(self.pm['prop_str:-missing'], 'a-string')

    def testColonMinusNone(self):
        # None is special-cased here, too
        self.assertEqual(self.pm['prop_none:-missing'], '')

    def testColonMinusZero(self):
        self.assertEqual(self.pm['prop_zero:-missing'], 0)

    def testColonMinusOne(self):
        self.assertEqual(self.pm['prop_one:-missing'], 1)

    def testColonMinusFalse(self):
        self.assertEqual(self.pm['prop_false:-missing'], False)

    def testColonMinusTrue(self):
        self.assertEqual(self.pm['prop_true:-missing'], True)

    def testColonMinusEmpty(self):
        self.assertEqual(self.pm['prop_empty:-missing'], '')

    def testColonMinusUnset(self):
        self.assertEqual(self.pm['prop_nosuch:-missing'], 'missing')


    def testColonTildeSet(self):
        self.assertEqual(self.pm['prop_str:~missing'], 'a-string')

    def testColonTildeNone(self):
        # None is special-cased *differently* for ~:
        self.assertEqual(self.pm['prop_none:~missing'], 'missing')

    def testColonTildeZero(self):
        self.assertEqual(self.pm['prop_zero:~missing'], 'missing')

    def testColonTildeOne(self):
        self.assertEqual(self.pm['prop_one:~missing'], 1)

    def testColonTildeFalse(self):
        self.assertEqual(self.pm['prop_false:~missing'], 'missing')

    def testColonTildeTrue(self):
        self.assertEqual(self.pm['prop_true:~missing'], True)

    def testColonTildeEmpty(self):
        self.assertEqual(self.pm['prop_empty:~missing'], 'missing')

    def testColonTildeUnset(self):
        self.assertEqual(self.pm['prop_nosuch:~missing'], 'missing')


    def testColonPlusSet(self):
        self.assertEqual(self.pm['prop_str:+present'], 'present')

    def testColonPlusNone(self):
        self.assertEqual(self.pm['prop_none:+present'], 'present')

    def testColonPlusZero(self):
        self.assertEqual(self.pm['prop_zero:+present'], 'present')

    def testColonPlusOne(self):
        self.assertEqual(self.pm['prop_one:+present'], 'present')

    def testColonPlusFalse(self):
        self.assertEqual(self.pm['prop_false:+present'], 'present')

    def testColonPlusTrue(self):
        self.assertEqual(self.pm['prop_true:+present'], 'present')

    def testColonPlusEmpty(self):
        self.assertEqual(self.pm['prop_empty:+present'], 'present')

    def testColonPlusUnset(self):
        self.assertEqual(self.pm['prop_nosuch:+present'], '')

    def testNoTempValues(self):
        self.assertEqual(self.pm.temp_vals, {})

    def testClearTempValues(self):
        self.pm.add_temporary_value('prop_temp', 'present')
        self.pm.clear_temporary_values()
        self.assertEqual(self.pm.temp_vals, {})

    def testTempValue(self):
        self.pm.add_temporary_value('prop_temp', 'present')
        self.assertEqual(self.pm['prop_temp'], 'present')
        self.pm.clear_temporary_values()

    def testTempValueOverrides(self):
        self.pm.add_temporary_value('prop_one', 2)
        self.assertEqual(self.pm['prop_one'], 2)
        self.pm.clear_temporary_values()

    def testTempValueColonMinusSet(self):
        self.pm.add_temporary_value('prop_one', 2)
        self.assertEqual(self.pm['prop_one:-missing'], 2)
        self.pm.clear_temporary_values()

    def testTempValueColonMinusUnset(self):
        self.pm.add_temporary_value('prop_nosuch', 'temp')
        self.assertEqual(self.pm['prop_nosuch:-missing'], 'temp')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueSet(self):
        self.pm.add_temporary_value('prop_false', 'temp')
        self.assertEqual(self.pm['prop_false:~nontrue'], 'temp')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueUnset(self):
        self.pm.add_temporary_value('prop_nosuch', 'temp')
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'temp')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeFalseFalse(self):
        self.pm.add_temporary_value('prop_false', False)
        self.assertEqual(self.pm['prop_false:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueFalse(self):
        self.pm.add_temporary_value('prop_true', False)
        self.assertEqual(self.pm['prop_true:~nontrue'], True)
        self.pm.clear_temporary_values()

    def testTempValueColonTildeNoneFalse(self):
        self.pm.add_temporary_value('prop_nosuch', False)
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()


    def testTempValueColonTildeFalseZero(self):
        self.pm.add_temporary_value('prop_false', 0)
        self.assertEqual(self.pm['prop_false:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueZero(self):
        self.pm.add_temporary_value('prop_true', 0)
        self.assertEqual(self.pm['prop_true:~nontrue'], True)
        self.pm.clear_temporary_values()

    def testTempValueColonTildeNoneZero(self):
        self.pm.add_temporary_value('prop_nosuch', 0)
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeFalseBlank(self):
        self.pm.add_temporary_value('prop_false', '')
        self.assertEqual(self.pm['prop_false:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValueColonTildeTrueBlank(self):
        self.pm.add_temporary_value('prop_true', '')
        self.assertEqual(self.pm['prop_true:~nontrue'], True)
        self.pm.clear_temporary_values()

    def testTempValueColonTildeNoneBlank(self):
        self.pm.add_temporary_value('prop_nosuch', '')
        self.assertEqual(self.pm['prop_nosuch:~nontrue'], 'nontrue')
        self.pm.clear_temporary_values()

    def testTempValuePlusSetSet(self):
        self.pm.add_temporary_value('prop_one', 2)
        self.assertEqual(self.pm['prop_one:+set'], 'set')
        self.pm.clear_temporary_values()

    def testTempValuePlusUnsetSet(self):
        self.pm.add_temporary_value('prop_nosuch', 1)
        self.assertEqual(self.pm['prop_nosuch:+set'], 'set')