diff --git a/src/backends/julia/CMakeLists.txt b/src/backends/julia/CMakeLists.txt --- a/src/backends/julia/CMakeLists.txt +++ b/src/backends/julia/CMakeLists.txt @@ -1,4 +1,5 @@ add_subdirectory(juliaserver) +add_subdirectory(tests) set(JuliaBackend_SRCS juliabackend.cpp diff --git a/src/backends/julia/tests/CMakeLists.txt b/src/backends/julia/tests/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/src/backends/julia/tests/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(testjulia testjulia.cpp) +target_link_libraries(testjulia ${QT_QTTEST_LIBRARY} cantorlibs cantortest) + +add_test(NAME testjulia COMMAND testjulia) diff --git a/src/backends/julia/tests/testjulia.h b/src/backends/julia/tests/testjulia.h new file mode 100644 --- /dev/null +++ b/src/backends/julia/tests/testjulia.h @@ -0,0 +1,36 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * 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 Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include + +class TestJulia: public BackendTest +{ + Q_OBJECT +private Q_SLOTS: + void testOneLine(); + void testOneLineWithPrint(); + void testException(); + void testMultilineCode(); + void testSyntaxError(); + +private: + virtual QString backendName(); +}; diff --git a/src/backends/julia/tests/testjulia.cpp b/src/backends/julia/tests/testjulia.cpp new file mode 100644 --- /dev/null +++ b/src/backends/julia/tests/testjulia.cpp @@ -0,0 +1,87 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * 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 Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#include "testjulia.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" + +QString TestJulia::backendName() +{ + return QLatin1String("julia"); +} + +void TestJulia::testOneLine() +{ + Cantor::Expression *e = evalExp(QLatin1String("2 + 3")); + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("5")); +} + +void TestJulia::testOneLineWithPrint() +{ + Cantor::Expression *e = evalExp(QLatin1String("print(2 + 3)")); + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("5")); +} + +void TestJulia::testException() +{ + Cantor::Expression *e = evalExp(QLatin1String("sqrt(-1)")); + QVERIFY(e != nullptr); + QVERIFY( + not e->errorMessage().isEmpty() + and e->errorMessage().contains(QLatin1String( + "sqrt will only return a complex result if called with a " + "complex argument. Try sqrt(complex(x))." + )) + ); +} + +void TestJulia::testSyntaxError() +{ + Cantor::Expression *e = evalExp(QLatin1String("for i = 1:10\nprint(i)")); + QVERIFY(e != nullptr); + QVERIFY( + not e->errorMessage().isEmpty() + and e->errorMessage().contains(QLatin1String( + "syntax: incomplete: \"for\" at none:1 requires end" + )) + ); +} + +void TestJulia::testMultilineCode() +{ + Cantor::Expression *e = evalExp(QLatin1String( + "q = 0; # comment\n" + "# sdfsdf\n" + "for i = 1:10\n" + " q += i\n" + "end\n" + "print(q)" + )); + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("55")); +} + +QTEST_MAIN(TestJulia) + +#include "testjulia.moc"