mycroft-core/test/integrationtests/skills/discover_tests.py

72 lines
1.9 KiB
Python

import os
import sys
import glob
import unittest
from test.integrationtests.skills.skill_tester import MockSkillsLoader
from test.integrationtests.skills.skill_tester import SkillTest
__author__ = 'seanfitz'
SKILL_PATH = '/opt/mycroft/skills'
def discover_tests():
global SKILL_PATH
if len(sys.argv) > 1:
SKILL_PATH = sys.argv.pop(1)
tests = {}
skills = [
skill for skill
in glob.glob(SKILL_PATH + '/*')
if os.path.isdir(skill)
]
for skill in skills:
test_intent_files = [
f for f
in glob.glob(os.path.join(skill, 'test/intent/*.intent.json'))
]
if len(test_intent_files) > 0:
tests[skill] = test_intent_files
return tests
class IntentTestSequenceMeta(type):
def __new__(mcs, name, bases, d):
def gen_test(a, b):
def test(self):
SkillTest(a, b, self.emitter).run(self.loader)
return test
tests = discover_tests()
for skill in tests.keys():
skill_name = os.path.basename(skill) # Path of the skill
for example in tests[skill]:
# Name of the intent
example_name = os.path.basename(
os.path.splitext(os.path.splitext(example)[0])[0])
test_name = "test_IntentValidation[%s:%s]" % (skill_name,
example_name)
d[test_name] = gen_test(skill, example)
return type.__new__(mcs, name, bases, d)
class IntentTestSequence(unittest.TestCase):
__metaclass__ = IntentTestSequenceMeta
@classmethod
def setUpClass(self):
self.loader = MockSkillsLoader(SKILL_PATH)
self.emitter = self.loader.load_skills()
@classmethod
def tearDownClass(self):
self.loader.unload_skills()
if __name__ == '__main__':
unittest.main()