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

86 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright 2017 Mycroft AI Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
This message tester lets a user input a Message event and a json test
case, and allows the evaluation of the Message event based on the
test case
It is supposed to be run in the Mycroft virtualenv, and python-tk
must be installed (on Ubuntu: apt-get install python-tk)
"""
from tkinter import Label, Button, Tk, NORMAL, END, DISABLED
from tkinter.scrolledtext import ScrolledText
import skill_tester
import ast
EXAMPLE_EVENT = '''{
'expect_response': False,
'utterance': 'Recording audio for 600 seconds'
}'''
EXAMPLE_TEST_CASE = '''{
"utterance": "record",
"intent_type": "AudioRecordSkillIntent",
"intent": {
"AudioRecordSkillKeyword": "record"
},
"expected_response": ".*(recording|audio)"
}'''
class MessageTester:
def __init__(self, root):
root.title("Message tester")
Label(root, text="Enter message event below", bg="light green").pack()
self.event_field = ScrolledText(root, width=180, height=10)
self.event_field.pack()
Label(root, text="Enter test case below", bg="light green").pack()
self.test_case_field = ScrolledText(root, width=180, height=20)
self.test_case_field.pack()
Label(root, text="Test result:", bg="light green").pack()
self.result_field = ScrolledText(root, width=180, height=10)
self.result_field.pack()
self.result_field.config(state=DISABLED)
self.button = Button(root, text="Evaluate", fg="red",
command=self._clicked)
self.button.pack()
self.event_field.delete('1.0', END)
self.event_field.insert('insert', EXAMPLE_EVENT)
self.test_case_field.delete('1.0', END)
self.test_case_field.insert('insert', EXAMPLE_TEST_CASE)
def _clicked(self):
event = self.event_field.get('1.0', END)
test_case = self.test_case_field.get('1.0', END)
evaluation = skill_tester.EvaluationRule(ast.literal_eval(test_case))
evaluation.evaluate(ast.literal_eval(event))
self.result_field.config(state=NORMAL)
self.result_field.delete('1.0', END)
self.result_field.insert('insert', evaluation.rule)
self.result_field.config(state=DISABLED)
r = Tk()
app = MessageTester(r)
r.mainloop()