ROM_data_layout = DataLayout('rom', 1) ROM_data_layout.register_file('game.gba', GBAFormat) plugin.register_type_to_data_layout(Game[GBA], 'rom', 1) def ROM_data_layout_to_buffered_reader(data_dir): return open(os.path.join(data_dir, 'game.gba'), 'rb') def buffered_reader_to_ROM_data_layout(view, data_dir): with open(os.path.join(data_dir, 'game.gba'), 'wb') as fh: fh.write(view.read()) plugin.register_data_layout(ROM_data_layout) plugin.register_data_layout_reader('rom', 1, io.BufferedReader, ROM_data_layout_to_buffered_reader) plugin.register_data_layout_writer('rom', 1, io.BufferedReader, buffered_reader_to_ROM_data_layout) def play(output_dir : str, rom : io.BufferedReader) -> None: with open(os.path.join(output_dir, 'gameloader.js'), 'wb') as fh: fh.write(b"onDataLoad('" + base64.b64encode(rom.read()) + b"');") copytree(os.path.join(os.path.dirname(__file__), 'assets'), os.path.join(output_dir))
class TestPlugin(unittest.TestCase): def setUp(self): # TODO standardize temporary directories created by QIIME self.test_dir = tempfile.TemporaryDirectory(prefix='qiime2-temp-') self.markdown_fp = os.path.join(self.test_dir.name, 'dummy_markdown_workflow.md') with open(self.markdown_fp, 'w') as markdown_fh: markdown_fh.write(markdown_template) self.plugin = Plugin( name='dummy-plugin', version='0.4.2', website='www.dummy-plugin-hub.com', package='dummy_plugin' ) def tearDown(self): self.test_dir.cleanup() def test_constructor(self): self.assertEqual(self.plugin.name, 'dummy-plugin') self.assertEqual(self.plugin.version, '0.4.2') self.assertEqual(self.plugin.website, 'www.dummy-plugin-hub.com') self.assertEqual(self.plugin.package, 'dummy_plugin') self.assertEqual(self.plugin.workflows, {}) self.assertEqual(self.plugin.data_layouts, {}) def test_register_data_layout(self): self.assertEqual(self.plugin.data_layouts, {}) def is_valid(data_dir): return True self.plugin.register_data_layout('my-format', '1.0.0', is_valid) exp_format = DataLayout('my-format', '1.0.0', is_valid) self.assertEqual(self.plugin.data_layouts, {('my-format', '1.0.0'): exp_format}) # TODO: test execution of data layout reader and writer def test_register_function(self): self.assertEqual(self.plugin.workflows, {}) self.plugin.register_function( name='Dummy function', function=dummy_function, inputs={}, parameters={}, outputs=[('answer', TestType)], doc='Computes the answer to life, the universe, and everything' ) self.plugin.register_function( name='Dummy function', function=other_dummy_function, inputs={}, parameters={}, outputs=[('answer', TestType)], doc='Computes the answer to life, the universe, and everything' ) workflows = { 'dummy_function': Workflow( signature=Signature( name='Dummy function', inputs={}, parameters={}, outputs=collections.OrderedDict([('answer', (TestType, list))])), template=expected_dummy_function_template, id_='dummy_function' ), 'other_dummy_function': Workflow( signature=Signature( name='Dummy function', inputs={}, parameters={}, outputs=collections.OrderedDict([('answer', (TestType, list))])), template=expected_other_dummy_function_template, id_='other_dummy_function' ) } self.assertEqual(self.plugin.workflows, workflows) def test_register_workflow(self): self.assertEqual(self.plugin.workflows, {}) with unittest.mock.patch.object(pkg_resources, 'resource_filename', return_value=self.markdown_fp): self.plugin.register_workflow(self.markdown_fp) workflows = { 'dummy_markdown_workflow': Workflow( signature=Signature( name='Dummy markdown workflow', inputs={}, parameters={'param1': (Int, int), 'param2': (Int, int)}, outputs=collections.OrderedDict([('the_sum', (TestType, list))])), template=frontmatter.parse(markdown_template)[1], id_='dummy_markdown_workflow' ) } self.assertEqual(self.plugin.workflows, workflows) def test_register_function_and_workflow(self): self.assertEqual(self.plugin.workflows, {}) self.plugin.register_function( name='Dummy function', function=dummy_function, inputs={}, parameters={}, outputs=[('answer', TestType)], doc='Computes the answer to life, the universe, and everything' ) with unittest.mock.patch.object(pkg_resources, 'resource_filename', return_value=self.markdown_fp): self.plugin.register_workflow(self.markdown_fp) workflows = { 'dummy_function': Workflow( signature=Signature( name='Dummy function', inputs={}, parameters={}, outputs=collections.OrderedDict([('answer', (TestType, list))])), template=expected_dummy_function_template, id_='dummy_function' ), 'dummy_markdown_workflow': Workflow( signature=Signature( name='Dummy markdown workflow', inputs={}, parameters={'param1': (Int, int), 'param2': (Int, int)}, outputs=collections.OrderedDict([('the_sum', (TestType, list))])), template=frontmatter.parse(markdown_template)[1], id_='dummy_markdown_workflow' ) } self.assertEqual(self.plugin.workflows, workflows)