diff options
Diffstat (limited to 'sw/qa/python/check_xnamedgraph.py')
-rw-r--r-- | sw/qa/python/check_xnamedgraph.py | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/sw/qa/python/check_xnamedgraph.py b/sw/qa/python/check_xnamedgraph.py new file mode 100644 index 000000000..84c774bdd --- /dev/null +++ b/sw/qa/python/check_xnamedgraph.py @@ -0,0 +1,170 @@ +#! /usr/bin/env python +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +import unittest +from org.libreoffice.unotest import UnoInProcess + + +class XNamedGraph(unittest.TestCase): + + @classmethod + def setUpClass(cls): + cls._uno = UnoInProcess() + cls._uno.setUp() + + @classmethod + def tearDownClass(cls): + cls._uno.tearDown() + + def test_getStatements(self): + xDMA = self._uno.openTemplateFromTDOC("XNamedGraph.ott") + xRepo = xDMA.getRDFRepository() + xGraphs = xRepo.getGraphNames() + + all = self.getStatementsCount(xGraphs, xDMA, None, None) + self.assertTrue(all > 0) + + # check that we have some node from the second RDF graph + # (but not any from the list of LO standard nodes) + DATE_URI_STR = "http://www.wollmux.org/WollMuxMetadata#WollMuxVersion" + xUri = self.nameToUri(DATE_URI_STR) + + onlyWollMux = self.getStatementsCount(xGraphs, xDMA, xUri, None) + self.assertTrue(onlyWollMux > 0) + self.assertTrue(onlyWollMux < all) + + xDMA.close(True) + + def test_Statements_AddRemove(self): + # take any first graph + xDMA = self._uno.openTemplateFromTDOC("XNamedGraph.ott") + xGraph = self.getAnyGraph(xDMA) + + DATE_URI_STR = "http://www.example.com/Metadata#Version" + OBJECT_STR = "foo" + + # not exist => add => remove + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR)) + self.addStatement(xDMA, xGraph, DATE_URI_STR, OBJECT_STR) + self.assertTrue(self.hasStatement(xDMA, xGraph, DATE_URI_STR)) + self.removeStatement(xDMA, xGraph, DATE_URI_STR, None) + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR)) + + xDMA.close(True) + + def test_Statements_RemoveByObject(self): + # take any first graph + xDMA = self._uno.openTemplateFromTDOC("XNamedGraph.ott") + xGraph = self.getAnyGraph(xDMA) + + DATE_URI_STR = "http://www.example.com/Metadata#Version" + OBJECT_STR = "foo" + + # remove by object + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR)) + self.addStatement(xDMA, xGraph, DATE_URI_STR, OBJECT_STR) + self.assertTrue(self.hasStatement(xDMA, xGraph, DATE_URI_STR)) + self.removeStatement(xDMA, xGraph, None, OBJECT_STR) + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR)) + + xDMA.close(True) + + def test_Statements_RemoveByObject(self): + # take any first graph + xDMA = self._uno.openTemplateFromTDOC("XNamedGraph.ott") + xGraph = self.getAnyGraph(xDMA) + + DATE_URI_STR_1 = "http://www.example.com/Metadata#Version" + DATE_URI_STR_2 = "http://www.example.com/Metadata#Second" + OBJECT_STR = "foo" + + # remove several with one call + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR_1)) + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR_2)) + self.addStatement(xDMA, xGraph, DATE_URI_STR_1, OBJECT_STR) + self.addStatement(xDMA, xGraph, DATE_URI_STR_2, OBJECT_STR) + self.assertTrue(self.hasStatement(xDMA, xGraph, DATE_URI_STR_1)) + self.assertTrue(self.hasStatement(xDMA, xGraph, DATE_URI_STR_2)) + self.removeStatement(xDMA, xGraph, None, OBJECT_STR) + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR_1)) + self.assertFalse(self.hasStatement(xDMA, xGraph, DATE_URI_STR_2)) + + xDMA.close(True) + + def getAnyGraph(self, xDMA): + xRepo = xDMA.getRDFRepository() + xGraphs = xRepo.getGraphNames() + self.assertTrue(len(xGraphs) > 0) + xGraph = xRepo.getGraph(xGraphs[0]) + self.assertIsNotNone(xGraph) + return xGraph + + def getStatementsCount(self, xGraphs, xDMA, xPredicate, xObject): + count = 0 + xRepo = xDMA.getRDFRepository() + + for xGraphUri in xGraphs: + xGraph = xRepo.getGraph(xGraphUri) + + xStatements = xGraph.getStatements(xDMA, xPredicate, xObject) + self.assertIsNotNone(xStatements) + + if xPredicate is None: + self.assertTrue(xStatements.hasMoreElements()) + + for xStatement in xStatements: + count += 1 + + return count + + def hasStatement(self, xDMA, xGraph, xPredicateName): + xPredicate = self.nameToUri(xPredicateName) + self.assertIsNotNone(xPredicate) + + xStatements = xGraph.getStatements(xDMA, xPredicate, None) + self.assertIsNotNone(xStatements) + return xStatements.hasMoreElements() + + def nameToUri(self, xPredicateName): + xServiceManager = self.__class__._uno.xContext.ServiceManager + xUri = xServiceManager.createInstance("com.sun.star.rdf.URI") + xUri.initialize((xPredicateName,)) + return xUri + + def stringToLiteral(self, xString): + xServiceManager = self.__class__._uno.xContext.ServiceManager + xLiteral = xServiceManager.createInstance("com.sun.star.rdf.Literal") + xLiteral.initialize((xString,)) + return xLiteral + + def addStatement(self, xDMA, xGraph, xPredicateName, xObjectStr): + xPredicate = self.nameToUri(xPredicateName) + self.assertIsNotNone(xPredicate) + + xObject = self.stringToLiteral(xObjectStr) + self.assertIsNotNone(xObject) + + xGraph.addStatement(xDMA, xPredicate, xObject) + + def removeStatement(self, xDMA, xGraph, xPredicateName, xObjectStr): + xPredicate = None + if xPredicateName is not None: + xPredicate = self.nameToUri(xPredicateName) + + xObject = None + if xObjectStr is not None: + xObject = self.stringToLiteral(xObjectStr) + + xGraph.removeStatements(xDMA, xPredicate, xObject) + + +if __name__ == '__main__': + unittest.main() + +# vim: set shiftwidth=4 softtabstop=4 expandtab: |