Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/prov/tests/test_model.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/prov/tests/test_model.py Sat May 02 07:14:21 2020 -0400 @@ -0,0 +1,249 @@ +""" +Created on Jan 25, 2012 + +@author: Trung Dong Huynh +""" +from __future__ import (absolute_import, division, print_function, + unicode_literals) + +import unittest +import logging +import os + +from prov.model import ProvDocument, ProvBundle, ProvException, first, Literal +from prov.tests import examples +from prov.tests.attributes import TestAttributesBase +from prov.tests.qnames import TestQualifiedNamesBase +from prov.tests.statements import TestStatementsBase +from prov.tests.utility import RoundTripTestCase + +logger = logging.getLogger(__name__) + + +EX_URI = 'http://www.example.org/' +EX2_URI = 'http://www.example2.org/' + + +class TestExamplesBase(object): + """This is the base class for testing support for all the examples provided + in prov.tests.examples. + It is not runnable and needs to be included in a subclass of + RoundTripTestCase. + """ + def test_all_examples(self): + counter = 0 + for name, graph in examples.tests: + counter += 1 + logger.info('%d. Testing the %s example', counter, name) + g = graph() + self.do_tests(g) + + +class TestLoadingProvToolboxJSON(unittest.TestCase): + def setUp(self): + self.json_path = os.path.dirname(os.path.abspath(__file__)) + '/json/' + filenames = os.listdir(self.json_path) + self.fails = [] + for filename in filenames: + if filename.endswith('.json'): + with open(self.json_path + filename) as json_file: + try: + g1 = ProvDocument.deserialize(json_file) + json_str = g1.serialize(indent=4) + g2 = ProvDocument.deserialize(content=json_str) + self.assertEqual( + g1, g2, + 'Round-trip JSON encoding/decoding failed: %s.' + % filename + ) + except: + self.fails.append(filename) + + def test_loading_all_json(self): + # self.assertFalse(fails, 'Failed to load/round-trip %d JSON files (%s)' % (len(fails), ', '.join(fails))) + + # Code for debugging the failed tests + for filename in self.fails: + # Reload the failed files + filepath = self.json_path + filename +# os.rename(json_path + filename, json_path + filename + '-fail') + with open(filepath) as json_file: + logger.info("Loading %s...", filepath) + g1 = ProvDocument.deserialize(json_file) + json_str = g1.serialize(indent=4) + g2 = ProvDocument.deserialize(content=json_str) + self.assertEqual( + g1, g2, + 'Round-trip JSON encoding/decoding failed: %s.' + % filename + ) + + +class TestFlattening(unittest.TestCase): + def test_flattening(self): + for name, graph in examples.tests: + logger.info('Testing flattening of the %s example', name) + document = graph() + flattened = document.flattened() + flattened_records = set(flattened.get_records()) + # counting all the records: + n_records = 0 + for record in document.get_records(): + n_records += 1 + self.assertIn(record, flattened_records) + for bundle in document.bundles: + for record in bundle.get_records(): + n_records += 1 + self.assertIn(record, flattened_records) + self.assertEqual(n_records, len(flattened.get_records())) + + +class TestUnification(unittest.TestCase): + def test_unifying(self): + # This is a very trivial test just to exercise the unified() function + # TODO: Create a proper unification test + json_path = os.path.dirname(os.path.abspath(__file__)) + '/unification/' + filenames = os.listdir(json_path) + for filename in filenames: + if not filename.endswith('.json'): + continue + filepath = json_path + filename + with open(filepath) as json_file: + logger.info('Testing unifying: %s', filename) + logger.debug("Loading %s...", filepath) + document = ProvDocument.deserialize(json_file) + flattened = document.flattened() + unified = flattened.unified() + self.assertLess( + len(unified.get_records()), + len(flattened.get_records()) + ) + + +class TestBundleUpdate(unittest.TestCase): + def test_bundle_update_simple(self): + doc = ProvDocument() + doc.set_default_namespace(EX_URI) + + b1 = doc.bundle('b1') + b1.entity('e') + + b2 = doc.bundle('b2') + b2.entity('e') + + self.assertRaises(ProvException, lambda: b1.update(1)) + self.assertRaises(ProvException, lambda: b1.update(doc)) + + b1.update(b2) + self.assertEqual(len(b1.get_records()), 2) + + def test_document_update_simple(self): + d1 = ProvDocument() + d1.set_default_namespace(EX_URI) + d1.entity('e') + + b1 = d1.bundle('b1') + b1.entity('e') + + d2 = ProvDocument() + d2.set_default_namespace(EX_URI) + d2.entity('e') + + b1 = d2.bundle('b1') + b1.entity('e') + b2 = d2.bundle('b2') + b2.entity('e') + + self.assertRaises(ProvException, lambda: d1.update(1)) + + d1.update(d2) + self.assertEqual(len(d1.get_records()), 2) + self.assertEqual(len(d1.bundles), 2) + + +class TestAddBundle(unittest.TestCase): + def document_1(self): + d1 = ProvDocument() + ns_ex = d1.add_namespace('ex', EX_URI) + d1.entity(ns_ex['e1']) + return d1 + + def document_2(self): + d2 = ProvDocument() + ns_ex = d2.add_namespace('ex', EX2_URI) + d2.activity(ns_ex['a1']) + return d2 + + def bundle_0(self): + b = ProvBundle(namespaces={'ex': EX2_URI}) + return b + + def test_add_bundle_simple(self): + d1 = self.document_1() + b0 = self.bundle_0() + + def sub_test_1(): + d1.add_bundle(b0) + self.assertRaises(ProvException, sub_test_1) + self.assertFalse(d1.has_bundles()) + + d1.add_bundle(b0, 'ex:b0') + self.assertTrue(d1.has_bundles()) + self.assertIn(b0, d1.bundles) + + def sub_test_2(): + ex2_b0 = b0.identifier + d1.add_bundle(ProvBundle(identifier=ex2_b0)) + self.assertRaises(ProvException, sub_test_2) + + d1.add_bundle(ProvBundle(), 'ex:b0') + self.assertEqual(len(d1.bundles), 2) + + def test_add_bundle_document(self): + d1 = self.document_1() + d2 = self.document_2() + + def sub_test_1(): + d1.add_bundle(d2) + self.assertRaises(ProvException, sub_test_1) + + ex2_b2 = d2.valid_qualified_name('ex:b2') + d1.add_bundle(d2, 'ex:b2') + self.assertEqual(ex2_b2, first(d1.bundles).identifier) + self.assertNotIn(d2, d1.bundles) + b2 = ProvBundle() + b2.update(d2) + self.assertIn(b2, d1.bundles) + +class TestLiteralRepresentation(unittest.TestCase): + def test_literal_provn_with_single_quotes(self): + l = Literal('{"foo": "bar"}') + string_rep = l.provn_representation() + self.assertTrue('{\\"f' in string_rep) + + def test_literal_provn_with_triple_quotes(self): + l = Literal('"""foo\\nbar"""') + string_rep = l.provn_representation() + self.assertTrue('\\"\\"\\"f' in string_rep) + +class AllTestsBase(TestExamplesBase, TestStatementsBase, + TestAttributesBase, TestQualifiedNamesBase): + """This is a test to include all available tests. + """ + pass + + +class RoundTripModelTest(RoundTripTestCase, AllTestsBase): + def assertRoundTripEquivalence(self, prov_doc, msg=None): + """Exercises prov.model without the actual serialization and PROV-N + generation. + """ + provn_content = prov_doc.get_provn() + # Checking for self-equality + self.assertEqual( + prov_doc, prov_doc, + 'The document is not self-equal:\n' + provn_content) + + +if __name__ == "__main__": + unittest.main()