diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-05-28 00:26:56 -0700 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-05-28 00:26:56 -0700 |
| commit | 5bff48f899dea3f4677203c5c15108a3e2e08e0b (patch) | |
| tree | f3b214058453f01cd62e89e82b1150647fc0377d /client/test.py | |
| parent | 2776412dbf287f34ec49980da840dd22c323a38d (diff) | |
| download | jasper-client-5bff48f899dea3f4677203c5c15108a3e2e08e0b.tar.gz jasper-client-5bff48f899dea3f4677203c5c15108a3e2e08e0b.zip | |
better unit tests for mic
Diffstat (limited to 'client/test.py')
| -rw-r--r-- | client/test.py | 94 |
1 files changed, 82 insertions, 12 deletions
diff --git a/client/test.py b/client/test.py index 26f7f4f..80191ca 100644 --- a/client/test.py +++ b/client/test.py @@ -1,9 +1,10 @@ import unittest +import argparse from mock import patch from urllib2 import URLError, urlopen import yaml -from test_mic import Mic -import modules +import test_mic +import g2p import brain @@ -15,6 +16,48 @@ def activeInternet(): return False +class TestMic(unittest.TestCase): + + def setUp(self): + self.jasper_clip = "../static/audio/jasper.wav" + self.time_clip = "../static/audio/time.wav" + + from mic import Mic + self.m = Mic("languagemodel.lm", "dictionary.dic", + "languagemodel_persona.lm", "dictionary_persona.dic") + + def testTranscribeJasper(self): + """Does Jasper recognize his name (i.e., passive listen)?""" + transcription = self.m.transcribe(self.jasper_clip, PERSONA_ONLY=True) + self.assertTrue("JASPER" in transcription) + + def testTranscribe(self): + """Does Jasper recognize 'time' (i.e., active listen)?""" + transcription = self.m.transcribe(self.time_clip) + self.assertTrue("TIME" in transcription) + + +class TestG2P(unittest.TestCase): + + def setUp(self): + self.translations = { + 'GOOD': 'G UH D', + 'BAD': 'B AE D', + 'UGLY': 'AH G L IY' + } + + def testTranslateWord(self): + for word in self.translations: + translation = self.translations[word] + self.assertEqual(g2p.translateWord(word), translation) + + def testTranslateWords(self): + words = self.translations.keys() + # preserve ordering + translations = [self.translations[w] for w in words] + self.assertEqual(g2p.translateWords(words), translations) + + class TestModules(unittest.TestCase): def setUp(self): @@ -32,29 +75,35 @@ class TestModules(unittest.TestCase): The server's responses, in a list. """ self.assertTrue(module.isValid(query)) - mic = Mic(inputs) + mic = test_mic.Mic(inputs) module.handle(query, mic, self.profile) return mic.outputs def testLife(self): + from modules import Life + query = "What is the meaning of life?" inputs = [] - outputs = self.runConversation(query, inputs, modules.Life) + outputs = self.runConversation(query, inputs, Life) self.assertEqual(len(outputs), 1) self.assertTrue("42" in outputs[0]) def testJoke(self): + from modules import Joke + query = "Tell me a joke." inputs = ["Who's there?", "Random response"] - outputs = self.runConversation(query, inputs, modules.Joke) + outputs = self.runConversation(query, inputs, Joke) self.assertEqual(len(outputs), 3) allJokes = open("../static/text/JOKES.txt", "r").read() self.assertTrue(outputs[2] in allJokes) def testTime(self): + from modules import Time + query = "What time is it?" inputs = [] - self.runConversation(query, inputs, modules.Time) + self.runConversation(query, inputs, Time) @unittest.skipIf(not activeInternet(), "No internet connection") def testGmail(self): @@ -62,35 +111,43 @@ class TestModules(unittest.TestCase): if not key in self.profile or not self.profile[key]: return + from modules import Gmail + query = "Check my email" inputs = [] - self.runConversation(query, inputs, modules.Gmail) + self.runConversation(query, inputs, Gmail) @unittest.skipIf(not activeInternet(), "No internet connection") def testHN(self): + from modules import HN + query = "find me some of the top hacker news stories" if self.send: inputs = ["the first and third"] else: inputs = ["no"] - outputs = self.runConversation(query, inputs, modules.HN) + outputs = self.runConversation(query, inputs, HN) self.assertTrue("front-page articles" in outputs[1]) @unittest.skipIf(not activeInternet(), "No internet connection") def testNews(self): + from modules import News + query = "find me some of the top news stories" if self.send: inputs = ["the first"] else: inputs = ["no"] - outputs = self.runConversation(query, inputs, modules.News) + outputs = self.runConversation(query, inputs, News) self.assertTrue("top headlines" in outputs[1]) @unittest.skipIf(not activeInternet(), "No internet connection") def testWeather(self): + from modules import Weather + query = "what's the weather like tomorrow" inputs = [] - outputs = self.runConversation(query, inputs, modules.Weather) + outputs = self.runConversation(query, inputs, Weather) self.assertTrue( "can't see that far ahead" in outputs[0] or "Tomorrow" in outputs[0]) @@ -100,7 +157,7 @@ class TestBrain(unittest.TestCase): @staticmethod def _emptyBrain(): - mic = Mic([]) + mic = test_mic.Mic([]) profile = yaml.safe_load(open("profile.yml", "r")) return brain.Brain(mic, profile) @@ -133,4 +190,17 @@ class TestBrain(unittest.TestCase): if __name__ == '__main__': - unittest.main() + parser = argparse.ArgumentParser( + description='Test suite for the Jasper client code.') + parser.add_argument('--light', action='store_true', + help="runs a subset of the tests (only requires Python dependencies)") + args = parser.parse_args() + + test_cases = [TestBrain, TestModules] + if not args.light: + test_cases.append(TestG2P) + test_cases.append(TestMic) + + for test_case in test_cases: + suite = unittest.TestLoader().loadTestsFromTestCase(test_case) + unittest.TextTestRunner(verbosity=2).run(suite) |
