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.ymlpull/1568/head
parent
8840a43886
commit
b200d51d39
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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__'
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in New Issue