aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTilman Roeder <tilman.roder@qt.io>2018-08-03 09:38:07 +0200
committerTilman Roeder <tilman.roder@qt.io>2018-08-15 10:10:16 +0000
commit13e02b9aaea19ac21251d152a8fa69336ae76ebd (patch)
treea6320449c18251033d3a2557afaed6a8fcafbfc9 /tests
parentefea0c2e4a2966d88f65cdab90f841f7905dee14 (diff)
Initial commit
This is a quite large commit containing: * The main extension that runs and initializes Python * Some (example) bindings * An initial build script for the main extension * Optional binding and examples of how to create them * An initial build script for the optional bindings * A simple extension manager written in Python * A few example Python extensions * Some documentation (both in the code and as markdown files) * A collection of helpful python scripts * A small collection of unit tests * A TODO list For any additional details the code / docs should be consulted. Change-Id: I3937886cfefa2f64d5a78013889a8e097eec8261 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'tests')
l---------tests/package.py1
-rw-r--r--tests/testextension/main.py141
-rw-r--r--tests/testextension/requirements.txt5
-rw-r--r--tests/testextension/setup.py48
4 files changed, 195 insertions, 0 deletions
diff --git a/tests/package.py b/tests/package.py
new file mode 120000
index 0000000..48dd31f
--- /dev/null
+++ b/tests/package.py
@@ -0,0 +1 @@
+../examples/package.py \ No newline at end of file
diff --git a/tests/testextension/main.py b/tests/testextension/main.py
new file mode 100644
index 0000000..a1773d8
--- /dev/null
+++ b/tests/testextension/main.py
@@ -0,0 +1,141 @@
+#############################################################################
+##
+## Copyright (C) 2018 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the Python Extensions Plugin for QtCreator.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# Unit tests for the Python Extensions Plugins
+# behavior from the view of an extension.
+# To use simply install as an extension and run
+# QtCreator. (Outputs to terminal)
+
+import unittest
+import os, sys, io
+
+# NOTE: Done here, because the unit-test stuff imports math
+math_imported = "math" in sys.modules
+
+# Test Cases
+
+class TestRequirements(unittest.TestCase):
+
+ def test_installed(self):
+ """
+ Test if numpy was installed as expected
+ """
+ try:
+ import numpy
+ except ImportError:
+ self.assertTrue(False, msg="Install failed.")
+
+ def test_marked(self):
+ """
+ Test whether the extensions requirements were
+ marked as installed
+ """
+ self.assertTrue(os.path.exists("{}/requirements.txt.installed".format(sys.path[0])), msg="Install was not marked.")
+
+class TestPath(unittest.TestCase):
+
+ def test_clean(self):
+ """
+ The sys.path should be sanitized after every script
+ is run. This also applies to setup.py
+ """
+ self.assertFalse("test/path" in sys.path, msg="Sys path not sanitized.")
+
+class TestModules(unittest.TestCase):
+
+ def test_clean(self):
+ """
+ The imported modules should be cleaned after every
+ script. This also applies to setup.py
+ """
+ self.assertFalse(math_imported, msg="Modules not sanitized.")
+
+ def test_exists_builtin(self):
+ """
+ Test if the bindings for Core, Utils, ExtensionSystem, and PluginInstance
+ exist. These are the bindings that currently ship with the main C++ plugin
+ and are non-optional.
+ """
+ try:
+ from PythonExtension import QtCreator
+ except ImportError:
+ self.assertTrue(False, msg="QtCreator binding module missing.")
+ self.assertTrue("Core" in dir(QtCreator), msg="Core module missing.")
+ self.assertTrue("Utils" in dir(QtCreator), msg="Utils module missing.")
+ self.assertTrue("ExtensionSystem" in dir(QtCreator), msg="ExtensionSystem module missing.")
+
+ def text_exists_optional(self):
+ """
+ These tests may fail, even if everything is setup correctly, depending on
+ which QtCreator plugins are enabled.
+ """
+ try:
+ from PythonExtension.QtCreator import PluginInstance
+ from PythonExtension.QtCreator import ProjectExplorer
+ from PythonExtension.QtCreator import TextEditor
+ except ImportError:
+ self.assertTrue(False, msg="Optional binding modules missing.")
+
+
+# Run Unit Tests
+
+def add_tests(test_case, suite):
+ for case in dir(test_case):
+ if case[:5] == "test_":
+ suite.addTest(test_case(case))
+
+def suite():
+ suite = unittest.TestSuite()
+ add_tests(TestRequirements, suite)
+ add_tests(TestPath, suite)
+ add_tests(TestModules, suite)
+ return suite
+
+out = io.StringIO()
+runner = unittest.TextTestRunner(out)
+runner.run(suite())
+
+print(out.getvalue())
+
+# Make test output available from ui
+
+from PythonExtension import QtCreator
+
+QtCreator.Core.MessageManager.write("Python Extensions: Unit test results:\n{}".format(out.getvalue()))
diff --git a/tests/testextension/requirements.txt b/tests/testextension/requirements.txt
new file mode 100644
index 0000000..869dda8
--- /dev/null
+++ b/tests/testextension/requirements.txt
@@ -0,0 +1,5 @@
+# A simple requirements.txt, more complex things
+# are not required, as pip is expected to be maintained
+# and tested.
+
+numpy
diff --git a/tests/testextension/setup.py b/tests/testextension/setup.py
new file mode 100644
index 0000000..1e57d9b
--- /dev/null
+++ b/tests/testextension/setup.py
@@ -0,0 +1,48 @@
+#############################################################################
+##
+## Copyright (C) 2018 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the Python Extensions Plugin for QtCreator.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# Setup for the tests
+
+# This should be sanitized after setup.py halts
+import sys
+sys.path.append("test/path")
+
+# This should not be available in main.py
+import math