aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/unittest/sourcerangefilter-test.cpp
blob: 4b84f4b5f87fbffd16a001a358918479eb649436 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/

#include "googletest.h"

#include <sourcerangefilter.h>

namespace {

using testing::ContainerEq;
using testing::IsEmpty;

using ClangBackEnd::SourceRangeWithTextContainer;
using ClangBackEnd::SourceRangeWithTextContainers;
using ClangBackEnd::SourceRangesForQueryMessage;

class SourceRangeFilter : public ::testing::Test
{
protected:


protected:
    SourceRangeWithTextContainers sourceRanges1{{1, 1, 1, 1, 2, 1, 4, "foo"},
                                                {1, 1, 1, 1, 2, 2, 5, "foo"},
                                                {2, 1, 1, 1, 2, 1, 4, "foo"}};
    SourceRangeWithTextContainers sourceRanges2{{3, 1, 1, 1, 2, 1, 4, "foo"},
                                                {1, 1, 1, 1, 2, 1, 4, "foo"},
                                                {1, 1, 1, 1, 2, 3, 6, "foo"}};
    SourceRangeWithTextContainers sourceRanges3{{1, 1, 1, 1, 2, 3, 6, "foo"},
                                                {3, 1, 1, 1, 2, 1, 4, "foo"}};
    SourceRangeWithTextContainers sourceRanges4{{1, 1, 1, 1, 2, 3, 6, "foo"},
                                                {3, 1, 1, 1, 2, 1, 4, "foo"},
                                                {3, 1, 1, 1, 2, 1, 4, "foo"}};
    SourceRangeWithTextContainers sourceRanges5{{3, 1, 1, 1, 2, 1, 4, "foo"},
                                                {1, 1, 1, 1, 2, 3, 6, "foo"}};
    SourceRangesForQueryMessage message1{{Utils::clone(sourceRanges1)}};
    SourceRangesForQueryMessage message2{{Utils::clone(sourceRanges2)}};
    ClangBackEnd::SourceRangeFilter filter{3};
};

TEST_F(SourceRangeFilter, DontChangeForFirstTimeIfElementsAreUnique)
{
    auto sourceRange = filter.removeDuplicates(Utils::clone(sourceRanges1));

    ASSERT_THAT(sourceRange, ContainerEq(sourceRanges1));
}

TEST_F(SourceRangeFilter, DoNotFilterNonDuplicates)
{
    filter.removeDuplicates(Utils::clone(sourceRanges1));

    auto sourceRange = filter.removeDuplicates(Utils::clone(sourceRanges3));

    ASSERT_THAT(sourceRange, ContainerEq(sourceRanges3));
}

TEST_F(SourceRangeFilter, FilterDuplicates)
{
    filter.removeDuplicates(Utils::clone(sourceRanges1));

    auto sourceRange = filter.removeDuplicates(Utils::clone(sourceRanges2));

    ASSERT_THAT(sourceRange, ContainerEq(sourceRanges3));
}

TEST_F(SourceRangeFilter, FilterMoreDuplicates)
{
    filter.removeDuplicates(Utils::clone(sourceRanges1));
    filter.removeDuplicates(Utils::clone(sourceRanges2));

    auto sourceRange = filter.removeDuplicates(Utils::clone(sourceRanges3));

    ASSERT_THAT(sourceRange, IsEmpty());
}

TEST_F(SourceRangeFilter, FilterDuplicatesFromMessage)
{
    filter.removeDuplicates(std::move(message1));

    auto filteredMessage = filter.removeDuplicates(std::move(message2));

    ASSERT_THAT(filteredMessage.sourceRanges.sourceRangeWithTextContainers,
                ContainerEq(sourceRanges3));
}

TEST_F(SourceRangeFilter, FilterDuplicatesInOneRangeSet)
{
    auto sourceRange = filter.removeDuplicates(Utils::clone(sourceRanges4));

    ASSERT_THAT(sourceRange, ContainerEq(sourceRanges3));
}

TEST_F(SourceRangeFilter, SortSourceRanges)
{
    auto sourceRange = filter.removeDuplicates(Utils::clone(sourceRanges5));

    ASSERT_THAT(sourceRange, ContainerEq(sourceRanges3));
}

}