aboutsummaryrefslogtreecommitdiffstats
path: root/tools/snippets_translate/tests/test_converter.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/snippets_translate/tests/test_converter.py')
-rw-r--r--tools/snippets_translate/tests/test_converter.py94
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