summaryrefslogtreecommitdiff
path: root/client/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'client/test.py')
-rw-r--r--client/test.py94
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)