# Copyright 2020 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. # """Tests for the Enclosure GUI interface.""" from unittest import TestCase, mock from mycroft.enclosure.gui import SkillGUI from mycroft.messagebus import Message from mycroft.util.file_utils import resolve_resource_file class TestSkillGUI(TestCase): def setUp(self): self.mock_skill = mock.Mock(name='Skill') self.mock_skill.skill_id = 'fortytwo-skill' def find_resource(page, folder): return '/test/{}/{}'.format(folder, page) self.mock_skill.find_resource = find_resource self.gui = SkillGUI(self.mock_skill) def test_show_page(self): self.gui.show_page('meaning.qml') sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] self.assertEqual(sent_message.msg_type, 'gui.page.show') self.assertEqual(sent_message.data['__from'], 'fortytwo-skill') self.assertEqual(sent_message.data['page'], ['file:///test/ui/meaning.qml']) self.assertEqual(sent_message.data['__idle'], None) def test_show_page_idle_override(self): self.gui.show_page('meaning.qml', override_idle=60) sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] self.assertEqual(sent_message.data['__idle'], 60) def test_show_pages(self): self.gui.show_pages(['meaning.qml', 'life.qml', 'universe.qml', 'everything.qml']) sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] expected_pages = ['file:///test/ui/meaning.qml', 'file:///test/ui/life.qml', 'file:///test/ui/universe.qml', 'file:///test/ui/everything.qml'] self.assertEqual(sent_message.data['page'], expected_pages) def test_remove_page(self): self.gui.remove_page('vogon_poetry.qml') sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] self.assertEqual(sent_message.msg_type, 'gui.page.delete') self.assertEqual(sent_message.data['__from'], 'fortytwo-skill') expected_page = 'file:///test/ui/vogon_poetry.qml' self.assertEqual(sent_message.data['page'], [expected_page]) def test_show_image(self): self.gui.show_image('arthur_dent.jpg') sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] page_path = resolve_resource_file('ui/SYSTEM_ImageFrame.qml') page_url = 'file://{}'.format(page_path) self.assertEqual(sent_message.data['page'], [page_url]) self.assertEqual(self.gui['image'], 'arthur_dent.jpg') def test_show_animated_image(self): self.gui.show_animated_image('dancing_zaphod.gif') sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] page_path = resolve_resource_file('ui/SYSTEM_AnimatedImageFrame.qml') page_url = 'file://{}'.format(page_path) self.assertEqual(sent_message.data['page'], [page_url]) self.assertEqual(self.gui['image'], 'dancing_zaphod.gif') def test_show_url(self): page = ('https://en.wikipedia.org/wiki/' 'The_Hitchhiker%27s_Guide_to_the_Galaxy') self.gui.show_url(page) sent_message = self.mock_skill.bus.emit.call_args_list[-1][0][0] page_path = resolve_resource_file('ui/SYSTEM_UrlFrame.qml') page_url = 'file://{}'.format(page_path) self.assertEqual(sent_message.data['page'], [page_url]) self.assertEqual(self.gui['url'], page) def test_show_html(self): html = '