Fix test cases under python 3

Lots of minor fixes including, sorting dicts, making ints of strings,
     MagicMock file spec and some other things

A couple of issues in the mycroft-core code base were identified and
fixed. Most notably the incorrect version check for python three when
adding basestring.

Update .travis.yml
pull/1568/head
Åke Forslund 2018-02-08 09:56:19 +01:00 committed by Matthew D. Scholefield
parent 8840a43886
commit b200d51d39
15 changed files with 39 additions and 32 deletions

View File

@ -1,9 +1,9 @@
language: python language: python
before_install: before_install:
- sudo apt-get update -qq - sudo apt-get update -qq
- sudo apt-get install -qq mpg123 portaudio19-dev libglib2.0-dev swig bison libtool autoconf libglib2.0-dev libicu-dev libfann-dev - sudo apt-get install -qq mpg123 portaudio19-dev libglib2.0-dev swig bison libtool autoconf libglib2.0-dev libicu-dev libfann-dev realpath
python: python:
- "2.7" - "3.4"
# don't rebuild pocketsphinx for every build # don't rebuild pocketsphinx for every build
cache: pocketsphinx-python cache: pocketsphinx-python
# command to install dependencies # command to install dependencies

View File

@ -24,8 +24,10 @@ from mycroft.util.json_helper import load_commented_json
from mycroft.util.log import LOG from mycroft.util.log import LOG
# Python 2+3 compatibility # Python 2+3 compatibility
import sys
from future.utils import iteritems from future.utils import iteritems
from past.builtins import basestring if sys.version_info[0] >= 3:
basestring = str
def merge_dict(base, delta): def merge_dict(base, delta):

View File

@ -42,7 +42,9 @@ from mycroft.skills.skill_data import (load_vocabulary, load_regex, to_letters,
from mycroft.util import resolve_resource_file from mycroft.util import resolve_resource_file
from mycroft.util.log import LOG from mycroft.util.log import LOG
# python 2+3 compatibility # python 2+3 compatibility
from past.builtins import basestring import sys
if sys.version_info[0] >= 3:
basestring = str
MainModule = '__init__' MainModule = '__init__'

View File

@ -1026,7 +1026,7 @@ def extract_datetime_pt(input_str, currentDate=None):
remainder = "am" remainder = "am"
used += 1 used += 1
elif wordNextNextNext == "noite": elif wordNextNextNext == "noite":
if 0 > strHH > 6: if 0 > int(strHH) > 6:
remainder = "am" remainder = "am"
else: else:
remainder = "pm" remainder = "pm"

View File

@ -49,7 +49,7 @@ def match_one(query, choices):
Returns: tuple with best match, score Returns: tuple with best match, score
""" """
if isinstance(choices, dict): if isinstance(choices, dict):
_choices = choices.keys() _choices = list(choices.keys())
elif isinstance(choices, list): elif isinstance(choices, list):
_choices = choices _choices = choices
else: else:

View File

@ -13,7 +13,6 @@
# limitations under the License. # limitations under the License.
# #
import unittest import unittest
from Queue import Queue
import speech_recognition import speech_recognition
from os.path import dirname, join from os.path import dirname, join
@ -21,6 +20,11 @@ from speech_recognition import WavFile, AudioData
from mycroft.client.speech.listener import AudioConsumer, RecognizerLoop from mycroft.client.speech.listener import AudioConsumer, RecognizerLoop
from mycroft.stt import MycroftSTT from mycroft.stt import MycroftSTT
import sys
if sys.version_info[0] < 3:
from Queue import Queue
else:
from queue import Queue
class MockRecognizer(object): class MockRecognizer(object):

View File

@ -44,7 +44,6 @@ class PocketSphinxTest(unittest.TestCase):
self.assertEquals(p.key_phrase, 'hey mycroft') self.assertEquals(p.key_phrase, 'hey mycroft')
def testVictoria(self): def testVictoria(self):
print "VICTORIA!"
config = { config = {
'hey victoria': { 'hey victoria': {
'module': 'pocketsphinx', 'module': 'pocketsphinx',

View File

@ -33,6 +33,9 @@ from mycroft.configuration.config import LocalConf, DEFAULT_CONFIG
BASE_CONF = LocalConf(DEFAULT_CONFIG) BASE_CONF = LocalConf(DEFAULT_CONFIG)
if sys.version_info[0] >= 3:
basestring = str
class MockEmitter(object): class MockEmitter(object):
def __init__(self): def __init__(self):
@ -89,8 +92,9 @@ class MycroftSkillTest(unittest.TestCase):
def check_emitter(self, result_list): def check_emitter(self, result_list):
for type in self.emitter.get_types(): for type in self.emitter.get_types():
self.assertEquals(type, 'register_vocab') self.assertEquals(type, 'register_vocab')
self.assertEquals(sorted(self.emitter.get_results()), self.assertEquals(sorted(self.emitter.get_results(),
sorted(result_list)) key=lambda d: sorted(d.items())),
sorted(result_list, key=lambda d: sorted(d.items())))
self.emitter.reset() self.emitter.reset()
def test_load_regex_from_file_single(self): def test_load_regex_from_file_single(self):
@ -106,17 +110,12 @@ class MycroftSkillTest(unittest.TestCase):
self.check_regex_from_file('invalid/none.rx') self.check_regex_from_file('invalid/none.rx')
def test_load_regex_from_file_invalid(self): def test_load_regex_from_file_invalid(self):
try: with self.assertRaises(error):
self.check_regex_from_file('invalid/invalid.rx') self.check_regex_from_file('invalid/invalid.rx')
except error as e:
self.assertEquals(e.__str__(),
'unexpected end of regular expression')
def test_load_regex_from_file_does_not_exist(self): def test_load_regex_from_file_does_not_exist(self):
try: with self.assertRaises(IOError):
self.check_regex_from_file('does_not_exist.rx') self.check_regex_from_file('does_not_exist.rx')
except IOError as e:
self.assertEquals(e.strerror, 'No such file or directory')
def test_load_regex_full(self): def test_load_regex_full(self):
self.check_regex(join(self.regex_path, 'valid'), self.check_regex(join(self.regex_path, 'valid'),
@ -295,8 +294,9 @@ class MycroftSkillTest(unittest.TestCase):
def check_register_object_file(self, types_list, result_list): def check_register_object_file(self, types_list, result_list):
self.assertEquals(sorted(self.emitter.get_types()), self.assertEquals(sorted(self.emitter.get_types()),
sorted(types_list)) sorted(types_list))
self.assertEquals(sorted(self.emitter.get_results()), self.assertEquals(sorted(self.emitter.get_results(),
sorted(result_list)) key=lambda d: sorted(d.items())),
sorted(result_list, key=lambda d: sorted(d.items())))
self.emitter.reset() self.emitter.reset()
def test_register_intent_file(self): def test_register_intent_file(self):
@ -326,8 +326,9 @@ class MycroftSkillTest(unittest.TestCase):
self.check_register_object_file(expected_types, expected_results) self.check_register_object_file(expected_types, expected_results)
def check_register_decorators(self, result_list): def check_register_decorators(self, result_list):
self.assertEquals(sorted(self.emitter.get_results()), self.assertEquals(sorted(self.emitter.get_results(),
sorted(result_list)) key=lambda d: sorted(d.items())),
sorted(result_list, key=lambda d: sorted(d.items())))
self.emitter.reset() self.emitter.reset()
def test_register_decorators(self): def test_register_decorators(self):

View File

@ -46,7 +46,6 @@ class ContextManagerTest(unittest.TestCase):
entity = {'confidence': 1.0} entity = {'confidence': 1.0}
context = 'TestContext' context = 'TestContext'
word = 'TestWord' word = 'TestWord'
print "Adding " + context
entity['data'] = [(word, context)] entity['data'] = [(word, context)]
entity['match'] = word entity['match'] = word
entity['key'] = word entity['key'] = word
@ -59,7 +58,6 @@ class ContextManagerTest(unittest.TestCase):
entity = {'confidence': 1.0} entity = {'confidence': 1.0}
context = 'TestContext' context = 'TestContext'
word = 'TestWord' word = 'TestWord'
print "Adding " + context
entity['data'] = [(word, context)] entity['data'] = [(word, context)]
entity['match'] = word entity['match'] = word
entity['key'] = word entity['key'] = word

View File

@ -19,7 +19,7 @@ class TestEventScheduler(unittest.TestCase):
Test creating and shutting down event_scheduler. Test creating and shutting down event_scheduler.
""" """
mock_load.return_value = '' mock_load.return_value = ''
mock_open.return_value = mock.MagicMock(spec=file) mock_open.return_value = mock.MagicMock()
emitter = mock.MagicMock() emitter = mock.MagicMock()
es = EventScheduler(emitter) es = EventScheduler(emitter)
es.shutdown() es.shutdown()
@ -36,7 +36,7 @@ class TestEventScheduler(unittest.TestCase):
""" """
# Thread start is mocked so will not actually run the thread loop # Thread start is mocked so will not actually run the thread loop
mock_load.return_value = '' mock_load.return_value = ''
mock_open.return_value = mock.MagicMock(spec=file) mock_open.return_value = mock.MagicMock()
emitter = mock.MagicMock() emitter = mock.MagicMock()
es = EventScheduler(emitter) es = EventScheduler(emitter)
@ -63,7 +63,7 @@ class TestEventScheduler(unittest.TestCase):
Test save functionality. Test save functionality.
""" """
mock_load.return_value = '' mock_load.return_value = ''
mock_open.return_value = mock.MagicMock(spec=file) mock_open.return_value = mock.MagicMock()
emitter = mock.MagicMock() emitter = mock.MagicMock()
es = EventScheduler(emitter) es = EventScheduler(emitter)
@ -87,7 +87,7 @@ class TestEventScheduler(unittest.TestCase):
Test save functionality. Test save functionality.
""" """
mock_load.return_value = '' mock_load.return_value = ''
mock_open.return_value = mock.MagicMock(spec=file) mock_open.return_value = mock.MagicMock()
emitter = mock.MagicMock() emitter = mock.MagicMock()
es = EventScheduler(emitter) es = EventScheduler(emitter)

View File

@ -26,7 +26,7 @@ class TestFileLoad(unittest.TestCase):
root_dir = dirname(__file__) root_dir = dirname(__file__)
# Load normal JSON file # Load normal JSON file
plainfile = join(root_dir, 'plain.json') plainfile = join(root_dir, 'plain.json')
with open(plainfile, 'rw') as f: with open(plainfile, 'r') as f:
data_from_plain = json.load(f) data_from_plain = json.load(f)
# Load commented JSON file # Load commented JSON file

View File

@ -14,7 +14,7 @@
# #
import unittest import unittest
import sys import sys
from cStringIO import StringIO from io import StringIO
from threading import Thread from threading import Thread
from mycroft.util.log import LOG from mycroft.util.log import LOG
@ -66,5 +66,6 @@ class TestLog(unittest.TestCase):
found_msg = True found_msg = True
assert found_msg assert found_msg
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -83,7 +83,7 @@ class TestNormalize(unittest.TestCase):
def test_extractdatetime_en(self): def test_extractdatetime_en(self):
def extractWithFormat(text): def extractWithFormat(text):
date = datetime(2017, 06, 27, 00, 00) date = datetime(2017, 6, 27, 0, 0)
[extractedDate, leftover] = extract_datetime(text, date) [extractedDate, leftover] = extract_datetime(text, date)
extractedDate = extractedDate.strftime("%Y-%m-%d %H:%M:%S") extractedDate = extractedDate.strftime("%Y-%m-%d %H:%M:%S")
return [extractedDate, leftover] return [extractedDate, leftover]

View File

@ -175,7 +175,7 @@ class TestNormalize(unittest.TestCase):
def test_extractdatetime_it(self): def test_extractdatetime_it(self):
def extractWithFormat(text): def extractWithFormat(text):
date = datetime(2018, 01, 13, 00, 00) date = datetime(2018, 1, 13, 0, 0)
[extractedDate, leftover] = extract_datetime(text, date, [extractedDate, leftover] = extract_datetime(text, date,
lang="it") lang="it")
extractedDate = extractedDate.strftime("%Y-%m-%d %H:%M:%S") extractedDate = extractedDate.strftime("%Y-%m-%d %H:%M:%S")

View File

@ -140,7 +140,7 @@ class TestNormalize(unittest.TestCase):
def test_extractdatetime_pt(self): def test_extractdatetime_pt(self):
def extractWithFormat(text): def extractWithFormat(text):
date = datetime(2017, 06, 27, 00, 00) date = datetime(2017, 6, 27, 0, 0)
[extractedDate, leftover] = extract_datetime(text, date, [extractedDate, leftover] = extract_datetime(text, date,
lang="pt") lang="pt")
extractedDate = extractedDate.strftime("%Y-%m-%d %H:%M:%S") extractedDate = extractedDate.strftime("%Y-%m-%d %H:%M:%S")