def test_serialize_deserialize(self):
        a = About(version=['1.0.1', '1.0.0'],
                  extensions={
                      'extension-a': 'http://www.example.com/ext/a',
                      'extension-b': 'http://www.example.com/ext/b',
                  })

        self.assertEqual(a.version, ['1.0.1', '1.0.0'])
        self.assertIn('extension-a', a.extensions)
        self.assertIn('extension-b', a.extensions)

        self.assertSerializeDeserialize(a)
    def test_serialize_deserialize_init(self):
        data = {
            'version': ['1.0.0'],
            'extensions': {
                'extension-a': 'http://www.example.com/ext/a',
                'extension-b': 'http://www.example.com/ext/b',
            },
        }

        a = About(data)

        self.assertEqual(a.version, ['1.0.0'])
        self.assertIn('extension-a', a.extensions)
        self.assertIn('extension-b', a.extensions)

        self.assertSerializeDeserialize(a)
    def test_bad_version_init(self):
        About(version='1.0.1')
        About(version=['1.0.1'])
        About(version=['1.0.1', '1.0.0'])

        with self.assertRaises(ValueError):
            About(version='bad version')

        with self.assertRaises(ValueError):
            About(version=['bad version'])

        with self.assertRaises(ValueError):
            About(version=['1.0.1', 'bad version'])

        with self.assertRaises(ValueError):
            About(version=['1.0.1', 'bad version'])
    def test_bad_property_init(self):
        with self.assertRaises(AttributeError):
            About(bad_name=2)

        with self.assertRaises(AttributeError):
            About({'bad_name': 2})
 def test_defaults(self):
     a = About()
     self.assertEqual(a.version, [Version.latest])