# Copyright (C) 2009, Tutorius.org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import unittest import os import uuid from sugar.tutorius.translator import * from sugar.tutorius.properties import * from sugar.tutorius.tutorial import * from sugar.tutorius.vault import Vault from sugar.tutorius import addon ############################################################################## ## Helper classes class ResourceAction(TPropContainer): resource = TResourceProperty() def __init__(self): TPropContainer.__init__(self) class NestedResource(TPropContainer): nested = TAddonProperty() def __init__(self): TPropContainer.__init__(self) self.nested = ResourceAction() class ListResources(TPropContainer): nested_list = TAddonListProperty() def __init__(self): TPropContainer.__init__(self) self.nested_list = [ResourceAction(), ResourceAction()] ## ############################################################################## class ResourceTranslatorTests(unittest.TestCase): temp_path = "/tmp/" file_name = "file.txt" def setUp(self): # Generate a tutorial ID self.tutorial_id = unicode(uuid.uuid1()) # Create a dummy fsm self.fsm = Tutorial("TestTutorial1") # Add a few states act1 = addon.create('BubbleMessage', message="Hi", position=[300, 450]) ev1 = addon.create('GtkWidgetEventFilter', "0.12.31.2.2", "clicked") act2 = addon.create('BubbleMessage', message="Second message", position=[250, 150], tail_pos=[1,2]) self.fsm.add_action("INIT", act1) st2 = self.fsm.add_state((act2,)) self.fsm.add_transition("INIT",(ev1, st2)) # Create a dummy metadata dictionnary self.test_metadata_dict = {} self.test_metadata_dict['name'] = 'TestTutorial1' self.test_metadata_dict['guid'] = unicode(self.tutorial_id) self.test_metadata_dict['version'] = '1' self.test_metadata_dict['description'] = 'This is a test tutorial 1' self.test_metadata_dict['rating'] = '3.5' self.test_metadata_dict['category'] = 'Test' self.test_metadata_dict['publish_state'] = 'false' activities_dict = {} activities_dict['org.laptop.tutoriusactivity'] = '1' activities_dict['org.laptop,writus'] = '1' self.test_metadata_dict['activities'] = activities_dict Vault.saveTutorial(self.fsm, self.test_metadata_dict) try: os.mkdir(self.temp_path) except: pass abs_file_path = os.path.join(self.temp_path, self.file_name) new_file = file(abs_file_path, "w") # Add the resource in the Vault self.res_name = Vault.add_resource(self.tutorial_id, abs_file_path) # Use a dummy prob manager - we shouldn't be using it self.prob_man = object() self.translator = ResourceTranslator(self.prob_man, self.tutorial_id) def tearDown(self): Vault.deleteTutorial(self.tutorial_id) os.unlink(os.path.join(self.temp_path, self.file_name)) def test_translate(self): # Create an action with a resource property res_action = ResourceAction() res_action.resource = self.res_name self.translator.translate(res_action) assert getattr(res_action, "resource").type == "file", "Resource was not converted to file" assert res_action.resource.default == Vault.get_resource_path(self.tutorial_id, self.res_name), "Transformed resource path is not the same as the one given by the vault" def test_recursive_translate(self): nested_action = NestedResource() self.translator.translate(nested_action) assert getattr(getattr(nested_action, "nested"), "resource").type == "file", "Nested resource was not converted properly" def test_list_translate(self): list_action = ListResources() self.translator.translate(list_action) for container in list_action.nested_list: assert getattr(container, "resource").type == "file", "Element of list was not converted properly"