// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <unittest/unittest.h>

#include "fidl/source_location.h"
#include "test_library.h"

namespace {

bool AddLine() {
    BEGIN_TEST;

    fidl::VirtualSourceFile file("imaginary-test-file");

    fidl::SourceLocation one = file.AddLine("one");
    fidl::SourceLocation two = file.AddLine("two");
    fidl::SourceLocation three = file.AddLine("three");

    EXPECT_STR_EQ(std::string(one.data()).c_str(), "one");
    EXPECT_STR_EQ(std::string(two.data()).c_str(), "two");
    EXPECT_STR_EQ(std::string(three.data()).c_str(), "three");

    END_TEST;
}

bool LineContaining() {
    BEGIN_TEST;

    fidl::VirtualSourceFile file("imaginary-test-file");

    file.AddLine("one");
    fidl::SourceLocation two = file.AddLine("two");
    file.AddLine("three");

    fidl::SourceFile::Position pos{};
    file.LineContaining(two.data(), &pos);
    EXPECT_EQ(pos.line, 2);
    EXPECT_EQ(pos.column, 1);

    END_TEST;
}

} // namespace

BEGIN_TEST_CASE(virtual_source_tests)

RUN_TEST(AddLine)
RUN_TEST(LineContaining)

END_TEST_CASE(virtual_source_tests)
