Files
qt-creator/tests/unit/unittest/sourcerangeextractor-test.cpp
Marco Bubke ada5ea1952 UnitTests: Fix names and disable slow tests by default
Slow and very slow tests have now their own test category. We add SlowTest
for tests which are slower than ~5ms and VerySlowTest if they are slower
than ~100ms. They are disabled them by "-*SlowTest.*". If you have a faster
machine than most developers simply try lower values. The aim is that most
developers can execute the tests in under ~2s.

In the long run we should use dependency breaking and data sharing to
reduce the count of the slow tests.

Change-Id: I8578071258d7f89b2052709f3dd526ced811483f
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2017-01-04 12:35:52 +00:00

194 lines
5.9 KiB
C++

/****************************************************************************
**
** Copyright (C) 2016 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 "testclangtool.h"
#include <sourcerangeextractor.h>
#include <sourcerangescontainer.h>
#if defined(__GNUC__)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wunused-parameter"
#elif defined(_MSC_VER)
# pragma warning(push)
# pragma warning( disable : 4100 )
#endif
#include <clang/Basic/SourceManager.h>
#include <clang/Lex/Lexer.h>
#if defined(__GNUC__)
# pragma GCC diagnostic pop
#elif defined(_MSC_VER)
# pragma warning(pop)
#endif
using testing::Contains;
using ::testing::Eq;
using ::testing::StrEq;
using ClangBackEnd::SourceRangeWithTextContainer;
using ClangBackEnd::SourceRangeExtractor;
namespace {
class SourceRangeExtractor : public ::testing::Test
{
protected:
void SetUp() override;
void TearDown() override;
protected:
TestClangTool clangTool{TESTDATA_DIR, "sourcerangeextractor_location.cpp", "", {"cc", "sourcerangeextractor_location.cpp"}};
ClangBackEnd::SourceRangesContainer sourceRangesContainer;
const clang::SourceManager &sourceManager{clangTool.sourceManager()};
ClangBackEnd::SourceRangeExtractor extractor{sourceManager, clangTool.languageOptions(), sourceRangesContainer};
clang::SourceLocation startLocation = sourceManager.getLocForStartOfFile(sourceManager.getMainFileID());
clang::SourceLocation endLocation = sourceManager.getLocForStartOfFile(sourceManager.getMainFileID()).getLocWithOffset(4);
clang::SourceRange sourceRange{startLocation, endLocation};
clang::SourceRange extendedSourceRange{startLocation, endLocation.getLocWithOffset(5)};
};
using SourceRangeExtractorSlowTest = SourceRangeExtractor;
TEST_F(SourceRangeExtractorSlowTest, ExtractSourceRangeContainer)
{
SourceRangeWithTextContainer sourceRangeContainer{1, 1, 1, 0, 1, 10, 9, Utils::SmallString("int value;")};
extractor.addSourceRange(sourceRange);
ASSERT_THAT(extractor.sourceRangeWithTextContainers(), Contains(sourceRangeContainer));
}
TEST_F(SourceRangeExtractorSlowTest, ExtendedSourceRange)
{
auto range = extractor.extendSourceRangeToLastTokenEnd(sourceRange);
ASSERT_THAT(range, extendedSourceRange);
}
TEST_F(SourceRangeExtractorSlowTest, FindStartOfLineInEmptyBuffer)
{
clang::StringRef text = "";
auto found = ::SourceRangeExtractor::findStartOfLineInBuffer(text, 0);
ASSERT_THAT(found, StrEq(""));
}
TEST_F(SourceRangeExtractorSlowTest, FindStartOfLineInBufferInFirstLine)
{
clang::StringRef text = "first line";
auto found = ::SourceRangeExtractor::findStartOfLineInBuffer(text, 5);
ASSERT_THAT(found, StrEq("first line"));
}
TEST_F(SourceRangeExtractorSlowTest, FindStartOfNewLineInBufferInSecondLine)
{
clang::StringRef text = "first line\nsecond line";
auto found = ::SourceRangeExtractor::findStartOfLineInBuffer(text, 15);
ASSERT_THAT(found, StrEq("second line"));
}
TEST_F(SourceRangeExtractorSlowTest, FindStartOfCarriageReturnInBufferInSecondLine)
{
clang::StringRef text = "first line\rsecond line";
auto found = ::SourceRangeExtractor::findStartOfLineInBuffer(text, 15);
ASSERT_THAT(found, StrEq("second line"));
}
TEST_F(SourceRangeExtractorSlowTest, FindStartOfNewLineCarriageReturnInBufferInSecondLine)
{
clang::StringRef text = "first line\n\rsecond line";
auto found = ::SourceRangeExtractor::findStartOfLineInBuffer(text, 15);
ASSERT_THAT(found, StrEq("second line"));
}
TEST_F(SourceRangeExtractorSlowTest, FindEndOfLineInEmptyBuffer)
{
clang::StringRef text = "";
auto found = ::SourceRangeExtractor::findEndOfLineInBuffer(text, 0);
ASSERT_THAT(found, StrEq(""));
}
TEST_F(SourceRangeExtractorSlowTest, FindEndOfLineInBuffer)
{
clang::StringRef text = "first line";
auto found = ::SourceRangeExtractor::findEndOfLineInBuffer(text, 5);
ASSERT_THAT(found, StrEq(""));
}
TEST_F(SourceRangeExtractorSlowTest, FindEndOfLineInBufferInFirstLineWithNewLine)
{
clang::StringRef text = "first line\nsecond line\nthird line";
auto found = ::SourceRangeExtractor::findEndOfLineInBuffer(text, 15);
ASSERT_THAT(found, StrEq("\nthird line"));
}
TEST_F(SourceRangeExtractorSlowTest, FindEndOfLineInBufferInFirstLineWithCarriageReturn)
{
clang::StringRef text = "first line\rsecond line\rthird line";
auto found = ::SourceRangeExtractor::findEndOfLineInBuffer(text, 15);
ASSERT_THAT(found, StrEq("\rthird line"));
}
TEST_F(SourceRangeExtractorSlowTest, EpandText)
{
clang::StringRef text = "first line\nsecond line\nthird line\nforth line";
auto expandedText = ::SourceRangeExtractor::getExpandedText(text, 15, 25);
ASSERT_THAT(expandedText, StrEq("second line\nthird line"));
}
void SourceRangeExtractor::SetUp()
{
TestGlobal::setSourceManager(&sourceManager);
}
void SourceRangeExtractor::TearDown()
{
TestGlobal::setSourceManager(nullptr);
}
}