Example #1
0
 def setUp(self):
     self.target = CmdStore()
     self.target.init_base(BASE_CMDS)
Example #2
0
class TestCmdStore(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        from otto.utils import shell, ChangePath, info
        info("Setting up CmdStore tests...")
        with ChangePath('otto/test/'):
            shell('otto dr')

    @classmethod
    def tearDownClass(cls):
        from otto.utils import ConfigFile, info
        info("Cleaning up after CmdStore tests...")
        with ConfigFile('otto/test/.otto/config.json') as config:
            config['packs']['test'] = ''

    def setUp(self):
        self.target = CmdStore()
        self.target.init_base(BASE_CMDS)

    def tearDown(self):
        del self.target

    def check_store(self, map):
        self.assertEqual(self.target.pack_keys, set(map.keys()))
        for pack, cmds in map.iteritems():
            self.assertEqual(self.target.cmds_by_pack[pack].keys(), cmds)

    def test_init(self):
        self.check_store(DEFAULT_MAP)

    def test_add_cmd(self):
        with TF() as _file:
            self.target._add_cmd('a', 'b', _file.name)
            self.assertTrue('a' in self.target.pack_keys)
            self.assertTrue('b' in self.target.cmds_by_pack['a'])
            self.assertEqual(self.target.cmds_by_pack['a']['b'], _file.name)

    def test_load_pack(self):
        self.target.load_pack(PACK_NAME, PACK_DIR)

        map = DEFAULT_MAP.copy()
        map.update(PACK_MAP)
        self.check_store(map)

    def test_load_cmd(self):
        # Make sure _load_cmd will always do nothing to a base cmd
        for cmd_name, cmd_ref in BASE_CMDS.iteritems():
            result = self.target._load_cmd(cmd_name, cmd_ref)
            self.assertTrue(isOttoCmd(result))

        # Make sure all refs for installed packs are paths...
        self.target.load_pack(PACK_NAME, PACK_DIR)
        test_pack = self.target.cmds_by_pack[PACK_NAME]
        for cmd_name, cmd_ref in test_pack.iteritems():
            self.assertTrue(isfile(cmd_ref))

            # ... and that they return from _load_cmd as an OttoCmd
            result = self.target._load_cmd(cmd_name, cmd_ref)
            self.assertTrue(isOttoCmd(result))

    def test_load_cmd_fail(self):
        self.target.load_pack(PACK_NAME, PACK_DIR)
        cmd_ref = self.target.cmds_by_pack[PACK_NAME]['test2']

        # Wrong test name
        with self.assertRaises(SystemExit):
            result = self.target._load_cmd('test3', cmd_ref)

    def test_lookup(self):
        self.target.load_pack(PACK_NAME, PACK_DIR)
    
        self.assertEqual(self.target.lookup('test1'), ('test', 'test1'))
        self.assertEqual(self.target.lookup('test2'), ('test', 'test2'))
        self.assertEqual(self.target.lookup('test:test1'), ('test', 'test1'))
        self.assertEqual(self.target.lookup('test:test2'), ('test', 'test2'))

    def test_lookup_fail(self):
        with self.assertRaises(SystemExit):
            self.target.lookup('test3')

    def test_installed_packs(self):
        self.target.load_pack(PACK_NAME, PACK_DIR)

        result = self.target.installed_packs()
        expected = set([PACK_NAME])
        self.assertEqual(expected, result)

        self.target.pack_keys.update(set(['fake1', 'fake2']))
        result = self.target.installed_packs()
        expected = set([PACK_NAME, 'fake1' ,'fake2'])
        self.assertEqual(expected, result)

        self.target.pack_keys.difference_update(set(['base', 'local']))
        result = self.target.installed_packs()
        expected = set([PACK_NAME, 'fake1' ,'fake2'])
        self.assertEqual(expected, result)

    def test_find_pack(self):
        self.target.load_pack(PACK_NAME, PACK_DIR)

        result = self.target.find_pack('test1')
        self.assertEqual(PACK_NAME, result)

        self.target.cmds_by_pack['local'] = {'test1': None}
        result = self.target.find_pack('test1')
        self.assertEqual('local', result)

        result = self.target.find_pack('fake')
        self.assertEqual(None, result)