def test_dict_to_KeyValue(self):
        from app_manager.msg import KeyValue
        from app_manager.app_list import dict_to_KeyValue

        v = dict_to_KeyValue({})
        self.assertEquals([], v)

        v = dict_to_KeyValue({'a': 'b'})
        self.assertEquals([KeyValue('a', 'b')], v)

        v = dict_to_KeyValue({'a': 'b', 'c': 'd'})
        for ve in [KeyValue('a', 'b'), KeyValue('c', 'd')]:
            self.assert_(ve in v)

        # make sure that types convert
        v = dict_to_KeyValue({'a': 1})
        self.assertEquals([KeyValue('a', '1')], v)
    def test_AppDefinition_to_App(self):
        from app_manager.msg import App, ClientApp, KeyValue
        from app_manager.app import AppDefinition, Client
        from app_manager.app_list import AppDefinition_to_App, dict_to_KeyValue

        ad = AppDefinition(name="appname", display_name="An App", 
                           description="Does something", platform="fakebot",
                           launch="file.launch", interface="file.interface", clients=[])
        a = AppDefinition_to_App(ad)
        self.assertEquals(a.name, 'appname')
        self.assertEquals(a.display_name, 'An App')
        self.assertEquals([], a.client_apps)

        client1 = Client('android',
                         {'manager1': 'data1'},
                         {'app1': 'data1'})
        ca = ClientApp('android', [KeyValue('manager1', 'data1')], [KeyValue('app1', 'data1')])
        ad = AppDefinition(name="appname", display_name="An App", 
                           description="Does something", platform="fakebot",
                           launch="file.launch", interface="file.interface", clients=[client1])
        a = AppDefinition_to_App(ad)
        self.assertEquals([ca], a.client_apps)

        client1 = Client('android',
                         {'manager1': 'data1', 'manager2': 'data2'},
                         {'app1': 'data1', 'app2': 'data2'})
        ca = ClientApp('android', dict_to_KeyValue(client1.manager_data), dict_to_KeyValue(client1.app_data))    
        ad = AppDefinition(name="appname", display_name="An App", 
                           description="Does something", platform="fakebot",
                           launch="file.launch", interface="file.interface", clients=[client1])
        a = AppDefinition_to_App(ad)
        self.assertEquals([ca], a.client_apps)

        client2 = Client('web', {},
                         {'app2': 'data2', 'app2b': 'data2b'})
        ca2 = ClientApp('web', [], dict_to_KeyValue(client2.app_data))  
        ad = AppDefinition(name="appname", display_name="An App", 
                           description="Does something", platform="fakebot",
                           launch="file.launch", interface="file.interface", clients=[client1, client2])
        a = AppDefinition_to_App(ad)
        self.assertEquals([ca, ca2], a.client_apps)