diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 9 | ||||
-rw-r--r-- | tests/Makefile | 12 | ||||
-rw-r--r-- | tests/foo_test.py | 105 | ||||
-rw-r--r-- | tests/foobinding/Makefile | 13 | ||||
-rw-r--r-- | tests/foobinding/foo/Makefile | 21 | ||||
-rw-r--r-- | tests/foobinding/global.h | 2 | ||||
-rw-r--r-- | tests/foobinding/typesystem_foo.xml | 6 | ||||
-rw-r--r-- | tests/libfoo/Makefile | 15 | ||||
-rw-r--r-- | tests/libfoo/bar.cpp | 15 | ||||
-rw-r--r-- | tests/libfoo/bar.h | 15 | ||||
-rw-r--r-- | tests/libfoo/foo.cpp | 17 | ||||
-rw-r--r-- | tests/libfoo/foo.h | 14 | ||||
-rw-r--r-- | tests/libfoo/main.cpp | 15 | ||||
-rw-r--r-- | tests/sphinxtabletest.cpp | 269 | ||||
-rw-r--r-- | tests/sphinxtabletest.h | 48 |
15 files changed, 576 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..9099adff8 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,9 @@ +project(sphinxtabletest) + +# TODO +set(sphinxtabletest_SRC sphinxtabletest.cpp) +qt4_automoc(${sphinxtabletest_SRC}) +include_directories(${QT_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${boostpythongenerator_SOURCE_DIR}) +add_executable(sphinxtabletest ${sphinxtabletest_SRC}) +target_link_libraries(sphinxtabletest ${QT_QTTEST_LIBRARY} ${APIEXTRACTOR_LIBRARY} libboostpythongenerator) +add_test("sphinxtable" sphinxtabletest) diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 000000000..054d6f576 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,12 @@ +all: + (cd libfoo; $(MAKE)) + (cd foobinding; $(MAKE)) + + +test: + LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(PWD)/libfoo PYTHONPATH=$(PYTHONPATH):$(PWD)/foobinding/foo python foo_test.py + +clean: + (cd libfoo; $(MAKE) clean) + (cd foobinding; $(MAKE) clean) + diff --git a/tests/foo_test.py b/tests/foo_test.py new file mode 100644 index 000000000..45b7e80e7 --- /dev/null +++ b/tests/foo_test.py @@ -0,0 +1,105 @@ + +'''Test cases for virtual methods called through generated bindings''' + +import unittest +try: + from foo import Foo, Bar +except: + import sys + print 'You need to set correct paths for libfoo and foo bindings' + import os + sys.exit(1) + + +class DerivedFoo(Foo): + + def __init__(self): + Foo.__init__(self) + + def pureVirtual(self): + print 'DerivedFoo.pureVirtual' + + +class VirtualMethods(unittest.TestCase): + '''Test case for virtual methods''' + + def setUp(self): + self.foo = Foo() + self.bar = Bar() + self.derivedfoo = DerivedFoo() + + def tearDown(self): + self.foo = None + self.bar = None + self.derivedfoo = None + + def testDerivedClassVirtualMethod(self): + '''Test reinplemented virtual methods from derived class''' + called = True + try: + self.bar.unpureVirtual() + self.bar.pureVirtual() + except: + called = False + self.assertTrue(called) + + def testBaseClassVirtualMethod(self): + '''Test virtual method from base class''' + called = True + try: + self.foo.unpureVirtual() + except: + called = False + self.assertTrue(called) + + + def testBaseClassPureVirtualMethod(self): + '''Test pure virtual method from base class''' + called = False + try: + self.foo.pureVirtual() + except: + called = False + self.assertFalse(called) + + def testBaseClassIndirectCallToUnpureVirtualMethod(self): + '''Test call to unpure virtual method from C++ to Python''' + called = True + try: + self.foo.unpureVirtual() + except: + called = False + self.assertTrue(called) + + def testDerivedClassIndirectCallToUnpureVirtualMethod(self): + '''Test call to unpure virtual method from C++ to Python''' + called = True + try: + self.bar.unpureVirtual() + except: + called = False + self.assertTrue(called) + + def testCppDerivedClassIndirectCallToPureVirtualMethod(self): + '''Test call to pure virtual method from C++ to Python''' + called = False + try: + self.bar.callPureVirtual() + except: + called = False + self.assertFalse(called) + + + def testDerivedClassIndirectCallToPureVirtualMethod(self): + '''Test call to pure virtual method from C++ to Python''' + called = False + try: + self.derivedfoo.callPureVirtual() + except: + called = False + self.assertFalse(called) + + +if __name__ == '__main__': + unittest.main() + diff --git a/tests/foobinding/Makefile b/tests/foobinding/Makefile new file mode 100644 index 000000000..30909aeeb --- /dev/null +++ b/tests/foobinding/Makefile @@ -0,0 +1,13 @@ +all: generate + (cd foo; $(MAKE)) + +generate: + boostpythongenerator --disable-named-arg global.h \ + --include-paths=`pwd`/../libfoo \ + --typesystem-paths=. --output-directory=. \ + typesystem_foo.xml + +clean: + rm *.log .preprocessed.tmp foo/*.hpp foo/*.cpp -rf + (cd foo; $(MAKE) clean) + diff --git a/tests/foobinding/foo/Makefile b/tests/foobinding/foo/Makefile new file mode 100644 index 000000000..4f6896f46 --- /dev/null +++ b/tests/foobinding/foo/Makefile @@ -0,0 +1,21 @@ +CXX_FLAGS=-DBOOST_PYTHON_NO_PY_SIGNATURES -g -fPIC -I/usr/include/python2.5 -I../../libfoo `pkg-config pyside --cflags` +CXX_LDFLAGS=-DBOOST_PYTHON_NO_PY_SIGNATURES -fPIC -shared -L../../libfoo -lfoo `pkg-config pyside --libs` + +all: foo_wrapper.o bar_wrapper.o foo_globals_wrapper.o foo_module_wrapper.o + g++ $(CXX_LDFLAGS) bar_wrapper.o foo_wrapper.o foo_globals_wrapper.o foo_module_wrapper.o -Wl,-soname,foo.so -o foo.so + +foo_wrapper.o: foo_wrapper.cpp foo_wrapper.hpp + g++ $(CXX_FLAGS) foo_wrapper.cpp -c + +bar_wrapper.o: bar_wrapper.cpp bar_wrapper.hpp + g++ $(CXX_FLAGS) bar_wrapper.cpp -c + +foo_globals_wrapper.o: foo_globals_wrapper.cpp + g++ $(CXX_FLAGS) foo_globals_wrapper.cpp -c + +foo_module_wrapper.o: foo_module_wrapper.cpp + g++ $(CXX_FLAGS) foo_module_wrapper.cpp -c + +clean: + rm *.o *.so -rf + diff --git a/tests/foobinding/global.h b/tests/foobinding/global.h new file mode 100644 index 000000000..a23601a31 --- /dev/null +++ b/tests/foobinding/global.h @@ -0,0 +1,2 @@ +#include "foo.h" +#include "bar.h" diff --git a/tests/foobinding/typesystem_foo.xml b/tests/foobinding/typesystem_foo.xml new file mode 100644 index 000000000..e4289e406 --- /dev/null +++ b/tests/foobinding/typesystem_foo.xml @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<typesystem package="foo"> + <object-type name="Foo"/> + <object-type name="Bar"/> +</typesystem> + diff --git a/tests/libfoo/Makefile b/tests/libfoo/Makefile new file mode 100644 index 000000000..eaf8f62f4 --- /dev/null +++ b/tests/libfoo/Makefile @@ -0,0 +1,15 @@ +all: foo.o bar.o + g++ -fPIC -shared foo.o bar.o -o libfoo.so + +foo.o: foo.h foo.cpp + g++ -fPIC foo.cpp -c + +bar.o: bar.h bar.cpp + g++ -fPIC bar.cpp -c + +test: main.cpp + g++ main.cpp -L. -lfoo -I. -o footest + +clean: + rm *.o *.so footest -rf + diff --git a/tests/libfoo/bar.cpp b/tests/libfoo/bar.cpp new file mode 100644 index 000000000..a8f9712a4 --- /dev/null +++ b/tests/libfoo/bar.cpp @@ -0,0 +1,15 @@ +#include <iostream> +#include "bar.h" + +using namespace std; + +void Bar::pureVirtual() +{ + cout << "Bar::pureVirtual()" << endl; +} + +void Bar::unpureVirtual() +{ + cout << "Bar::unpureVirtual()" << endl; +} + diff --git a/tests/libfoo/bar.h b/tests/libfoo/bar.h new file mode 100644 index 000000000..4a73c2deb --- /dev/null +++ b/tests/libfoo/bar.h @@ -0,0 +1,15 @@ +#ifndef BAR_H +#define BAR_H + +#include "foo.h" + +class Bar : public Foo +{ +public: + Bar() {} + virtual ~Bar() {} + virtual void pureVirtual(); + virtual void unpureVirtual(); +}; +#endif // BAR_H + diff --git a/tests/libfoo/foo.cpp b/tests/libfoo/foo.cpp new file mode 100644 index 000000000..22be35018 --- /dev/null +++ b/tests/libfoo/foo.cpp @@ -0,0 +1,17 @@ +#include <iostream> +#include "foo.h" + +using namespace std; + +void Foo::unpureVirtual() +{ + cout << "Foo::unpureVirtual()" << endl; +} + +void Foo::callPureVirtual() +{ + cout << "Foo::callPureVirtual() -- calling pureVirtual..." << endl; + this->pureVirtual(); + cout << " -- pureVirtual called." << endl; +} + diff --git a/tests/libfoo/foo.h b/tests/libfoo/foo.h new file mode 100644 index 000000000..585b844f7 --- /dev/null +++ b/tests/libfoo/foo.h @@ -0,0 +1,14 @@ +#ifndef FOO_H +#define FOO_H + +class Foo +{ +public: + Foo() {} + virtual ~Foo() {} + virtual void pureVirtual() = 0; + virtual void unpureVirtual(); + virtual void callPureVirtual(); +}; +#endif // FOO_H + diff --git a/tests/libfoo/main.cpp b/tests/libfoo/main.cpp new file mode 100644 index 000000000..6f410addb --- /dev/null +++ b/tests/libfoo/main.cpp @@ -0,0 +1,15 @@ +#include "foo.h" +#include "bar.h" + +int +main(int argv, char **argc) +{ + Bar bar; + + bar.unpureVirtual(); + bar.pureVirtual(); + bar.callPureVirtual(); + + return 0; +} + diff --git a/tests/sphinxtabletest.cpp b/tests/sphinxtabletest.cpp new file mode 100644 index 000000000..058a3b522 --- /dev/null +++ b/tests/sphinxtabletest.cpp @@ -0,0 +1,269 @@ +/* +* This file is part of the Boost Python Generator project. +* +* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +* +* Contact: PySide team <contact@pyside.org> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA +* +*/ + +#include "sphinxtabletest.h" +#include "docgenerator.h" +#include <QtTest/QTest> +#include <QDebug> + +QString SphinxTableTest::transformXml(const char* xml) +{ + return QtXmlToSphinx(m_generator, xml).result(); +} + +void SphinxTableTest::setUp() +{ + m_generator = new DocGenerator; +} + +void SphinxTableTest::tearDown() +{ + delete m_generator; +} + +void SphinxTableTest::testEmptyString() +{ + const char* xml = ""; + QCOMPARE(transformXml(xml), QString()); +} + +void SphinxTableTest::testSimpleTable() +{ + const char* xml = "\ +<table>\ + <header>\ + <item>\ + <para>Header 1</para>\ + </item>\ + <item>\ + <para>Header 2</para>\ + </item>\ + </header>\ + <row>\ + <item>\ + <para>1 1</para>\ + </item>\ + <item>\ + <para>1 2</para>\ + </item>\ + </row>\ + <row>\ + <item>\ + <para>2 1</para>\ + </item>\ + <item>\ + <para>2 2</para>\ + </item>\ + </row>\ +</table>"; + QCOMPARE(transformXml(xml), QString("\ + +--------+--------+\n\ + |Header 1|Header 2|\n\ + +--------+--------+\n\ + |1 1 |1 2 |\n\ + +--------+--------+\n\ + |2 1 |2 2 |\n\ + +--------+--------+\n\ +\n")); +} + +void SphinxTableTest::testColSpan() +{ + const char* xml = "\ +<table>\ + <header>\ + <item>\ + <para>Header 1</para>\ + </item>\ + <item>\ + <para>Header 2</para>\ + </item>\ + </header>\ + <row>\ + <item colspan=\"2\">\ + <para>I'm a big text!</para>\ + </item>\ + </row>\ + <row>\ + <item>\ + <para>2 1</para>\ + </item>\ + <item>\ + <para>2 2</para>\ + </item>\ + </row>\ +</table>"; + QCOMPARE(transformXml(xml), QString("\ + +---------------+--------+\n\ + |Header 1 |Header 2|\n\ + +---------------+--------+\n\ + |I'm a big text! |\n\ + +---------------+--------+\n\ + |2 1 |2 2 |\n\ + +---------------+--------+\n\ +\n")); +} + + +void SphinxTableTest::testRowSpan() +{ + const char* xml = "\ +<table>\ + <header>\ + <item>\ + <para>Header 1</para>\ + </item>\ + <item>\ + <para>Header 2</para>\ + </item>\ + </header>\ + <row>\ + <item rowspan=\"2\">\ + <para>1.1</para>\ + </item>\ + <item>\ + <para>1.2</para>\ + </item>\ + </row>\ + <row>\ + <item>\ + <para>2 2</para>\ + </item>\ + </row>\ +</table>"; + QCOMPARE(transformXml(xml), QString("\ + +--------+--------+\n\ + |Header 1|Header 2|\n\ + +--------+--------+\n\ + |1.1 |1.2 |\n\ + + +--------+\n\ + | |2 2 |\n\ + +--------+--------+\n\ +\n")); +} + + +void SphinxTableTest::testComplexTable() +{ + const char* xml = "\ +<table>\ + <header>\ + <item>\ + <para>Header 1</para>\ + </item>\ + <item>\ + <para>Header 2</para>\ + </item>\ + <item>\ + <para>Header 3</para>\ + </item>\ + </header>\ + <row>\ + <item rowspan=\"2\">\ + <para>1.1</para>\ + </item>\ + <item colspan=\"2\">\ + <para>1.2</para>\ + </item>\ + </row>\ + <row>\ + <item>\ + <para>2 2</para>\ + </item>\ + <item>\ + <para>2 3</para>\ + </item>\ + </row>\ +</table>"; + QCOMPARE(transformXml(xml), QString("\ + +--------+--------+--------+\n\ + |Header 1|Header 2|Header 3|\n\ + +--------+--------+--------+\n\ + |1.1 |1.2 |\n\ + + +--------+--------+\n\ + | |2 2 |2 3 |\n\ + +--------+--------+--------+\n\ +\n")); +} + +void SphinxTableTest::testRowSpan2() +{ + const char* xml = "\ +<table>\ + <header>\ + <item><para>h1</para></item>\ + <item><para>h2</para></item>\ + <item><para>h3</para></item>\ + <item><para>h4</para></item>\ + </header>\ + <row>\ + <item rowspan=\"6\"><para>A</para></item>\ + <item rowspan=\"6\"><para>B</para></item>\ + <item><para>C</para></item>\ + <item><para>D</para></item>\ + </row>\ + <row>\ + <item><para>E</para></item>\ + <item><para>F</para></item>\ + </row>\ + <row>\ + <item><para>E</para></item>\ + <item><para>F</para></item>\ + </row>\ + <row>\ + <item><para>E</para></item>\ + <item><para>F</para></item>\ + </row>\ + <row>\ + <item><para>E</para></item>\ + <item><para>F</para></item>\ + </row>\ + <row>\ + <item><para>E</para></item>\ + <item><para>F</para></item>\ + </row>\ +</table>"; + QCOMPARE(transformXml(xml), QString("\ + +--+--+--+--+\n\ + |h1|h2|h3|h4|\n\ + +--+--+--+--+\n\ + |A |B |C |D |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + +--+--+--+--+\n\ +\n")); +} + + + +QTEST_APPLESS_MAIN( SphinxTableTest ) + +#include "sphinxtabletest.moc" diff --git a/tests/sphinxtabletest.h b/tests/sphinxtabletest.h new file mode 100644 index 000000000..163cc5337 --- /dev/null +++ b/tests/sphinxtabletest.h @@ -0,0 +1,48 @@ +/* +* This file is part of the Boost Python Generator project. +* +* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +* +* Contact: PySide team <contact@pyside.org> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA +* +*/ + +#ifndef SPHINXTABLETEST_H +#define SPHINXTABLETEST_H + +#include <QObject> + +class DocGenerator; +class SphinxTableTest : public QObject { + Q_OBJECT + +private slots: + void setUp(); + void tearDown(); + void testEmptyString(); + void testSimpleTable(); + void testRowSpan(); + void testColSpan(); + void testComplexTable(); + void testRowSpan2(); +private: + DocGenerator* m_generator; + + QString transformXml(const char* xml); +}; + +#endif |