aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/Tests/DbVersionConverterTest/tst_dbversionconvertertesttest.cpp
blob: 7d69e7eb4e96ed404e89af9c153d36bd86e72e64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "dbversionconverter.h"
#include "parser/lexer.h"
#include "parser/keywords.h"
#include <QString>
#include <QtTest>

class DbVersionConverterTestTest : public QObject
{
        Q_OBJECT

    public:
        DbVersionConverterTestTest();

    private Q_SLOTS:
        void initTestCase();
        void init();
        void cleanupTestCase();
        void testColumnAutoIncr();
        void testIndexedColumn();
        void testInsertMultiValues();
        void testSelectWith();
        void testTableWithoutRowId();
        void testTableWithDefaultCtime();

    private:
        void printErrors();

        DbVersionConverter* converter = nullptr;
};

DbVersionConverterTestTest::DbVersionConverterTestTest()
{
}

void DbVersionConverterTestTest::testColumnAutoIncr()
{
    QString query = "CREATE TABLE test (col INTEGER PRIMARY KEY AUTOINCREMENT);";
    QString result = converter->convert3To2(query);

    printErrors();
    QVERIFY(converter->getErrors().size() == 0);
    QVERIFY(result == "CREATE TABLE test (col INTEGER PRIMARY KEY);");
}

void DbVersionConverterTestTest::testIndexedColumn()
{
    QString query = "CREATE INDEX idx ON test (col COLLATE NOCASE ASC);";
    QString result = converter->convert3To2(query);

    printErrors();
    QVERIFY(converter->getErrors().size() == 0);
    QVERIFY(result == "CREATE INDEX idx ON test (col ASC);");
}

void DbVersionConverterTestTest::testInsertMultiValues()
{
    QString query = "INSERT INTO test (col1, col2) VALUES (1, 'a'), (2, 'b');";
    QString result = converter->convert3To2(query);

    printErrors();
    QVERIFY(converter->getErrors().size() == 0);
    QVERIFY(result == "INSERT INTO test (col1, col2) SELECT 1, 'a' UNION ALL SELECT 2, 'b';");
}

void DbVersionConverterTestTest::testSelectWith()
{
    QString query = "WITH RECURSIVE cnt (x) AS (VALUES(1) UNION ALL SELECT x + 1 FROM cnt WHERE x < 1000000) SELECT x FROM cnt;";
    QString result = converter->convert3To2(query);

    QVERIFY(converter->getErrors().size() == 1);
    QVERIFY(result == ";");
}

void DbVersionConverterTestTest::testTableWithoutRowId()
{
    QString query = "CREATE TABLE test (col PRIMARY KEY) WITHOUT ROWID;";
    QString result = converter->convert3To2(query);

    printErrors();
    QVERIFY(converter->getErrors().size() == 0);
    QVERIFY(result == "CREATE TABLE test (col PRIMARY KEY);");
}

void DbVersionConverterTestTest::testTableWithDefaultCtime()
{
    QString query = "CREATE TABLE test (col INT DEFAULT current_date NOT NULL);";
    QString result = converter->convert3To2(query);

    printErrors();
    QVERIFY(converter->getErrors().size() == 0);
    QVERIFY(result == "CREATE TABLE test (col INT NOT NULL);");
}

void DbVersionConverterTestTest::printErrors()
{
    for (const QString& err : converter->getErrors())
        qWarning() << err;
}

void DbVersionConverterTestTest::initTestCase()
{
    initKeywords();
    Lexer::staticInit();
    converter = new DbVersionConverter();
}

void DbVersionConverterTestTest::init()
{
    converter->reset();
}

void DbVersionConverterTestTest::cleanupTestCase()
{
    delete converter;
}

QTEST_APPLESS_MAIN(DbVersionConverterTestTest)

#include "tst_dbversionconvertertesttest.moc"