diff options
Diffstat (limited to 'tools/snippets_translate/tests/test_converter.py')
-rw-r--r-- | tools/snippets_translate/tests/test_converter.py | 94 |
1 files changed, 82 insertions, 12 deletions
diff --git a/tools/snippets_translate/tests/test_converter.py b/tools/snippets_translate/tests/test_converter.py index be46e0c0b..084cc8a6d 100644 --- a/tools/snippets_translate/tests/test_converter.py +++ b/tools/snippets_translate/tests/test_converter.py @@ -4,6 +4,11 @@ from converter import snippet_translate as st +def multi_st(lines): + result = [st(l) for l in lines.split("\n")] + return "\n".join(result) + + def test_comments(): assert st("// This is a comment") == "# This is a comment" assert st("// double slash // inside") == "# double slash // inside" @@ -42,6 +47,7 @@ def test_and_or(): def test_while_if_elseif(): assert st("while(a)") == "while a:" assert st("if (condition){") == "if condition:" + assert st(" if (condition){") == " if condition:" assert st("} else if (a) {") == " elif a:" assert ( st("if (!m_vbo.isCreated()) // init() failed,") @@ -63,7 +69,11 @@ def test_else(): def test_new(): assert st("a = new Something(...);") == "a = Something(...)" - assert st("a = new Something") == "a = Something" + assert st("a = new Something") == "a = Something()" + assert st("foo(new X, new Y(b), new Z)") == "foo(X(), Y(b), Z())" + # Class member initialization list + assert st("m_mem(new Something(p)),") == "m_mem(Something(p))," + assert st("m_mem(new Something),") == "m_mem(Something())," def test_semicolon(): @@ -90,6 +100,10 @@ def test_cast(): st("elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;") == "elapsed = (elapsed + QTimer(sender()).interval()) % 1000" ) + assert ( + st("a = qobject_cast<type*>(data) * 9 + static_cast<int>(42)") + == "a = type(data) * 9 + int(42)" + ) def test_double_colon(): @@ -100,7 +114,22 @@ def test_double_colon(): # multiline statement connect statement # eg: connect(reply, &QNetworkReply::errorOccurred, # this, &MyClass::slotError); - assert st("this, &MyClass::slotError);") == "self, MyClass.slotError)" + assert st("this, &MyClass::slotError);") == "self.slotError)" + + +def test_connects(): + assert ( + st("connect(button, &QPushButton::clicked, this, &MyClass::slotClicked);") + == "button.clicked.connect(self.slotClicked)" + ) + assert ( + st("connect(m_ui->button, &QPushButton::clicked, this, &MyClass::slotClicked);") + == "m_ui.button.clicked.connect(self.slotClicked)" + ) + assert ( + st("connect(button.get(), &QPushButton::clicked, this, &MyClass::slotClicked);") + == "button.clicked.connect(self.slotClicked)" + ) def test_cout_endl(): @@ -137,19 +166,25 @@ def test_cout_endl(): def test_variable_declaration(): assert st("QLabel label;") == "label = QLabel()" - assert st('QLabel label("Hello")') == 'label = QLabel("Hello")' + assert st('QLabel label("Hello");') == 'label = QLabel("Hello")' assert st("Widget w;") == "w = Widget()" assert st('QLabel *label = new QLabel("Hello");') == 'label = QLabel("Hello")' assert st('QLabel label = a_function("Hello");') == 'label = a_function("Hello")' assert st('QString a = "something";') == 'a = "something"' assert st("int var;") == "var = int()" assert st("float v = 0.1;") == "v = 0.1" - assert st("QSome<thing> var") == "var = QSome()" + assert st("QSome<thing> var;") == "var = QSome()" assert st("QQueue<int> queue;") == "queue = QQueue()" assert st("QVBoxLayout *layout = new QVBoxLayout;") == "layout = QVBoxLayout()" assert st("QPointer<QLabel> label = new QLabel;") == "label = QLabel()" assert st("QMatrix4x4 matrix;") == "matrix = QMatrix4x4()" assert st("QList<QImage> collage =") == "collage =" + assert st("bool b = true;") == "b = True" + assert st("Q3DBars *m_graph = nullptr;") == "m_graph = None" + # Do not fall for member function definitions + assert st("Q3DBars *Graph::bars() const") == "Q3DBars Graph.bars()" + # Do not fall for member function declarations + assert st("virtual Q3DBars *bars();") == "virtual Q3DBars bars()" def test_for(): @@ -191,7 +226,7 @@ def test_for(): assert st("for (QChar ch : s)") == "for ch in s:" assert ( st("for (const QByteArray &ext : " "qAsConst(extensionList))") - == "for ext in qAsConst(extensionList):" + == "for ext in extensionList:" ) assert st("for (QTreeWidgetItem *item : found) {") == "for item in found:" @@ -285,24 +320,24 @@ def test_constuctors(): def test_inheritance_init(): assert ( st(": QClass(fun(re, 1, 2), parent), a(1)") - == " QClass.__init__(self, fun(re, 1, 2), parent)\n self.a = 1" + == " super().__init__(fun(re, 1, 2), parent)\n self.a = 1" ) assert ( st(": QQmlNdefRecord(copyFooRecord(record), parent)") - == " QQmlNdefRecord.__init__(self, copyFooRecord(record), parent)" + == " super().__init__(copyFooRecord(record), parent)" ) assert ( st(" : QWidget(parent), helper(helper)") - == " QWidget.__init__(self, parent)\n self.helper = helper" + == " super().__init__(parent)\n self.helper = helper" ) - assert st(" : QWidget(parent)") == " QWidget.__init__(self, parent)" + assert st(" : QWidget(parent)") == " super().__init__(parent)" assert ( st(": a(0), bB(99), cC2(1), p_S(10),") == " self.a = 0\n self.bB = 99\n self.cC2 = 1\n self.p_S = 10" ) assert ( st(": QAbstractFileEngineIterator(nameFilters, filters), index(0) ") - == " QAbstractFileEngineIterator.__init__(self, nameFilters, filters)\n self.index = 0" + == " super().__init__(nameFilters, filters)\n self.index = 0" ) assert ( st(": m_document(doc), m_text(text)") == " self.m_document = doc\n self.m_text = text" @@ -312,7 +347,7 @@ def test_inheritance_init(): st(": option->palette.color(QPalette::Mid);") == " self.option.palette.color = QPalette.Mid" ) - assert st(": QSqlResult(driver) {}") == " QSqlResult.__init__(self, driver)" + assert st(": QSqlResult(driver) {}") == " super().__init__(driver)" def test_arrays(): @@ -330,6 +365,7 @@ def test_functions(): st("QString myDecoderFunc(const QByteArray &localFileName);") == "def myDecoderFunc(localFileName):" ) + assert st("return QModelIndex();") == "return QModelIndex()" def test_foreach(): @@ -358,7 +394,12 @@ def test_ternary_operator(): def test_useless_qt_classes(): assert st('result += QLatin1String("; ");') == 'result += "; "' + assert st('result += QString::fromLatin1("; ");') == 'result += "; "' + assert ( + st('result = QStringLiteral("A") + QStringLiteral("B");') + == 'result = "A" + "B"') assert st("<< QLatin1Char('\0') << endl;") == "print('\0')" + assert st('result = u"A"_s;') == 'result = "A"' def test_special_cases(): @@ -373,7 +414,7 @@ def test_special_cases(): ) assert ( st("QObject::connect(&window1, &Window::messageSent,") - == "QObject.connect(window1, Window.messageSent," + == "window1.messageSent.connect(" ) assert st("double num;") == "num = float()" @@ -406,6 +447,35 @@ def test_lambdas(): pass +def test_switch_case(): + source = """switch (v) { +case 1: + f1(); + break; +case ClassName::EnumValue: + f2(); + break; +default: + f3(); + break; +} +""" + expected = """ +if v == 1: + f1() + break +elif v == ClassName.EnumValue: + f2() + break +else: + f3() + break + +""" + + assert multi_st(source) == expected + + def test_std_function(): # std::function<QImage(const QImage &)> scale = [](const QImage &img) { pass |