From 91a92aecad9ac043c34f8696d2f2a631117097cf Mon Sep 17 00:00:00 2001 From: hsorby Date: Mon, 14 Jun 2021 21:25:12 +1200 Subject: [PATCH 01/10] Add a basic model with namespaces on MathML cn elements. --- test-models/basic_model.cellml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 test-models/basic_model.cellml diff --git a/test-models/basic_model.cellml b/test-models/basic_model.cellml new file mode 100644 index 0000000..9037bc9 --- /dev/null +++ b/test-models/basic_model.cellml @@ -0,0 +1,16 @@ + + + + + + + t + + + 1 + 3 + + + + + \ No newline at end of file From 675bb8d2e99f2056d497349dfabda7b89c709a2d Mon Sep 17 00:00:00 2001 From: hsorby Date: Mon, 14 Jun 2021 21:33:29 +1200 Subject: [PATCH 02/10] Move units that are children of components into the model element. --- cellml1to2.xsl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cellml1to2.xsl b/cellml1to2.xsl index c3bf9e1..1e08fea 100644 --- a/cellml1to2.xsl +++ b/cellml1to2.xsl @@ -52,10 +52,19 @@ + + + + + + + + + From 172b7dc7cbba9b693b92352b927a6be527e25621 Mon Sep 17 00:00:00 2001 From: hsorby Date: Mon, 14 Jun 2021 21:36:11 +1200 Subject: [PATCH 03/10] Add example Van der Pol model with units as a child of a component. --- test-models/van_der_pol_model.cellml | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test-models/van_der_pol_model.cellml diff --git a/test-models/van_der_pol_model.cellml b/test-models/van_der_pol_model.cellml new file mode 100644 index 0000000..8453b12 --- /dev/null +++ b/test-models/van_der_pol_model.cellml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + time + + x + + + + y + 1 + + + + + + + + time + + y + + + + + + + + epsilon + + + 1 + + + x + 2 + + + y + + x + + 1 + + + + + From 7c0225465f5d9b1d4bf832b0062903cf23eff428 Mon Sep 17 00:00:00 2001 From: hsorby Date: Mon, 14 Jun 2021 21:41:21 +1200 Subject: [PATCH 04/10] Add new line to end of basic model. --- test-models/basic_model.cellml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-models/basic_model.cellml b/test-models/basic_model.cellml index 9037bc9..a863c34 100644 --- a/test-models/basic_model.cellml +++ b/test-models/basic_model.cellml @@ -13,4 +13,4 @@ - \ No newline at end of file + From 5e7c46670ab3c7fc8957bd82a0bc6ab7a1d3a343 Mon Sep 17 00:00:00 2001 From: hsorby Date: Wed, 25 Aug 2021 18:13:59 +1200 Subject: [PATCH 05/10] Add .gitignore file and ignore tmp/ directory. --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3fec32c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tmp/ From 283821b89132265efe4991b6cb9c00e72b008878 Mon Sep 17 00:00:00 2001 From: hsorby Date: Wed, 25 Aug 2021 18:14:26 +1200 Subject: [PATCH 06/10] Add van der Pol model with Units defined in a Component. --- test-models/van_der_pol_model_1928.txt | 61 ++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test-models/van_der_pol_model_1928.txt diff --git a/test-models/van_der_pol_model_1928.txt b/test-models/van_der_pol_model_1928.txt new file mode 100644 index 0000000..8453b12 --- /dev/null +++ b/test-models/van_der_pol_model_1928.txt @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + time + + x + + + + y + 1 + + + + + + + + time + + y + + + + + + + + epsilon + + + 1 + + + x + 2 + + + y + + x + + 1 + + + + + From 6d033e91e278b0e9cbf4769abcd3e9aa0e706815 Mon Sep 17 00:00:00 2001 From: hsorby Date: Wed, 25 Aug 2021 18:17:33 +1200 Subject: [PATCH 07/10] Remove duplicated test-models/van_der_pol_model_1928.txt model. --- test-models/van_der_pol_model_1928.txt | 61 -------------------------- 1 file changed, 61 deletions(-) delete mode 100644 test-models/van_der_pol_model_1928.txt diff --git a/test-models/van_der_pol_model_1928.txt b/test-models/van_der_pol_model_1928.txt deleted file mode 100644 index 8453b12..0000000 --- a/test-models/van_der_pol_model_1928.txt +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - time - - x - - - - y - 1 - - - - - - - - time - - y - - - - - - - - epsilon - - - 1 - - - x - 2 - - - y - - x - - 1 - - - - - From 3753dc66c6b57f998a53ae7bc6f84d5040cf7fc5 Mon Sep 17 00:00:00 2001 From: hsorby Date: Wed, 25 Aug 2021 18:25:35 +1200 Subject: [PATCH 08/10] Copy over name attribute of Units when moving from Component to Model. --- cellml1to2.xsl | 1 + 1 file changed, 1 insertion(+) diff --git a/cellml1to2.xsl b/cellml1to2.xsl index 32f3bf7..60f9727 100644 --- a/cellml1to2.xsl +++ b/cellml1to2.xsl @@ -55,6 +55,7 @@ + From 9f8f519f109ecd5d19f6584f27f18bb5aa74abcd Mon Sep 17 00:00:00 2001 From: hsorby Date: Wed, 25 Aug 2021 20:47:32 +1200 Subject: [PATCH 09/10] Add a simple testing regime using libCellML, Python, and saxon. --- .gitignore | 2 ++ README.md | 12 ++++++++ test-scripts/__init__.py | 0 test-scripts/test_model.py | 61 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 test-scripts/__init__.py create mode 100644 test-scripts/test_model.py diff --git a/.gitignore b/.gitignore index 3fec32c..4d50fc3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ tmp/ +.idea/ +__pycache__ diff --git a/README.md b/README.md index 50b57c3..f41e5be 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,15 @@ Attempt at using XSLT to translate CellML 1.0 and 1.1 documents into the propose Note that it needs an XSLT 2 processor to handle namespace nodes nicely. Tested using the Saxon engine within oXygen XML and Saxon on the command line, e.g., `saxon -s:test-models/cellml1.0.xml -xsl:cellml1to2.xsl`. This is primarily an effort to enable the production of a suite of test CellML 2.0 models for use in testing the functionality of [libCellML](http://libcellml.readthedocs.io/). + +## tests + +There are some simple tests that can be run with Python, saxon, and libCellML. + +From the repository root directory run: + +`python -m unittest` + +The final result should be: + +`OK` diff --git a/test-scripts/__init__.py b/test-scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test-scripts/test_model.py b/test-scripts/test_model.py new file mode 100644 index 0000000..d63032b --- /dev/null +++ b/test-scripts/test_model.py @@ -0,0 +1,61 @@ +import unittest + +import libcellml as lc + +from subprocess import Popen, PIPE + + +def run_saxon(model_name): + with Popen(["saxon", f"-s:test-models/{model_name}", "-xsl:cellml1to2.xsl"], stdout=PIPE) as proc: + return proc.stdout.read().decode() + + +class TranslationTestCase(unittest.TestCase): + + def setUp(self): + self._p = lc.Parser() + self._v = lc.Validator() + + def test_basic_model(self): + translated_model = run_saxon('basic_model.cellml') + + m = self._p.parseModel(translated_model) + + self._v.validateModel(m) + + self.assertEqual(0, self._v.errorCount()) + + def test_van_der_pol_model(self): + translated_model = run_saxon('van_der_pol_model.cellml') + + m = self._p.parseModel(translated_model) + + self._v.validateModel(m) + + self.assertEqual(0, self._v.errorCount()) + + def test_cellml_1_0_model(self): + translated_model = run_saxon('cellml1.0.xml') + + m = self._p.parseModel(translated_model) + + self._v.validateModel(m) + + self.assertEqual(2, self._v.errorCount()) + self.assertIn('celsius', self._v.error(0).description()) + self.assertEqual('1.3.1.2', self._v.error(1).referenceHeading()) + + def test_cellml_1_1_model(self): + translated_model = run_saxon('cellml1.1.xml') + + m = self._p.parseModel(translated_model) + + self._v.validateModel(m) + + self.assertEqual(2, self._v.errorCount()) + self.assertIn('celsius', self._v.error(0).description()) + self.assertEqual('1.3.1.2', self._v.error(1).referenceHeading()) + + +if __name__ == '__main__': + unittest.main() From a2633090ba66befc0949dc845f8a2499ee234f00 Mon Sep 17 00:00:00 2001 From: hsorby Date: Wed, 25 Aug 2021 20:52:05 +1200 Subject: [PATCH 10/10] Simplify test_model.py script. --- test-scripts/test_model.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/test-scripts/test_model.py b/test-scripts/test_model.py index d63032b..0894d69 100644 --- a/test-scripts/test_model.py +++ b/test-scripts/test_model.py @@ -16,41 +16,32 @@ def setUp(self): self._p = lc.Parser() self._v = lc.Validator() - def test_basic_model(self): - translated_model = run_saxon('basic_model.cellml') + def _validate_model(self, model_name): + translated_model = run_saxon(model_name) m = self._p.parseModel(translated_model) self._v.validateModel(m) + def test_basic_model(self): + self._validate_model('basic_model.cellml') + self.assertEqual(0, self._v.errorCount()) def test_van_der_pol_model(self): - translated_model = run_saxon('van_der_pol_model.cellml') - - m = self._p.parseModel(translated_model) - - self._v.validateModel(m) + self._validate_model('van_der_pol_model.cellml') self.assertEqual(0, self._v.errorCount()) def test_cellml_1_0_model(self): - translated_model = run_saxon('cellml1.0.xml') - - m = self._p.parseModel(translated_model) - - self._v.validateModel(m) + self._validate_model('cellml1.0.xml') self.assertEqual(2, self._v.errorCount()) self.assertIn('celsius', self._v.error(0).description()) self.assertEqual('1.3.1.2', self._v.error(1).referenceHeading()) def test_cellml_1_1_model(self): - translated_model = run_saxon('cellml1.1.xml') - - m = self._p.parseModel(translated_model) - - self._v.validateModel(m) + self._validate_model('cellml1.1.xml') self.assertEqual(2, self._v.errorCount()) self.assertIn('celsius', self._v.error(0).description())