aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/unittest/projectstoragesqlitefunctionregistry-test.cpp
blob: baa9c7cc31679a394b6a72a2d18124eefa4d0b1a (plain)
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
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0

#include "googletest.h"

#include <projectstorage/projectstoragesqlitefunctionregistry.h>

namespace {

class ProjectStorageSqliteFunctionRegistry : public testing::Test
{
protected:
    Sqlite::Database database{":memory:", Sqlite::JournalMode::Memory};
    QmlDesigner::ProjectStorageSqliteFunctionRegistry registry{database};
};

TEST_F(ProjectStorageSqliteFunctionRegistry, ReturnsUnqualifiedType)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement{"SELECT unqualifiedTypeName('Foo.Bar')", database};

    auto typeName = statement.value<Utils::SmallString>();

    ASSERT_THAT(typeName, Eq("Bar"));
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ReturnsWholeStringIfNotDotIsFound)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement{"SELECT unqualifiedTypeName('Foo_Bar')", database};

    auto typeName = statement.value<Utils::SmallString>();

    ASSERT_THAT(typeName, Eq("Foo_Bar"));
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ReturnEmptyStringForEmptyInput)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement{"SELECT unqualifiedTypeName('')", database};

    auto typeName = statement.value<Utils::SmallString>();

    ASSERT_THAT(typeName, IsEmpty());
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ThrowsErrorForInteger)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement("SELECT unqualifiedTypeName(1)", database);

    ASSERT_THROW(statement.value<Utils::SmallString>(), Sqlite::StatementHasError);
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ThrowsErrorForFloat)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement("SELECT unqualifiedTypeName(1.4)", database);

    ASSERT_THROW(statement.value<Utils::SmallString>(), Sqlite::StatementHasError);
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ThrowsErrorForBlob)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement("SELECT unqualifiedTypeName(x'0500')", database);

    ASSERT_THROW(statement.value<Utils::SmallString>(), Sqlite::StatementHasError);
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ThrowsErrorForNull)
{
    std::lock_guard lock{database};
    Sqlite::ReadStatement<1> statement("SELECT unqualifiedTypeName(NULL)", database);

    ASSERT_THROW(statement.value<Utils::SmallString>(), Sqlite::StatementHasError);
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ThrowsErrorForNoArgument)
{
    std::lock_guard lock{database};

    ASSERT_THROW(Sqlite::ReadStatement<1> statement("SELECT unqualifiedTypeName()", database),
                 Sqlite::StatementHasError);
}

TEST_F(ProjectStorageSqliteFunctionRegistry, ThrowsErrorForToManyArgument)
{
    std::lock_guard lock{database};

    ASSERT_THROW(Sqlite::ReadStatement<1> statement("SELECT unqualifiedTypeName('foo', 'bar')",
                                                    database),
                 Sqlite::StatementHasError);
}
} // namespace