blob: 02fc8be0ccd7ccbea5d899ab3c0e71850e2afe02 [file] [log] [blame]
// Copyright 2017-2020 The Verible Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "common/formatting/token_partition_tree_test_utils.h"
#include <vector>
#include "common/formatting/format_token.h"
#include "common/formatting/token_partition_tree.h"
#include "common/formatting/unwrapped_line.h"
#include "common/util/tree_operations.h"
#include "gtest/gtest.h"
namespace verible {
namespace {
bool PartitionsEqual(const UnwrappedLine& left, const UnwrappedLine& right) {
return (left.TokensRange() == right.TokensRange()) &&
(left.IndentationSpaces() == right.IndentationSpaces()) &&
(left.PartitionPolicy() == right.PartitionPolicy()) &&
(left.Origin() == right.Origin());
}
} // namespace
TokenPartitionTree TokenPartitionTreeBuilder::build(
const std::vector<verible::PreFormatToken>& tokens) const {
TokenPartitionTree node;
node.Children().reserve(children_.size());
for (const auto& child : children_) {
node.Children().push_back(child.build(tokens));
}
FormatTokenRange node_tokens;
if (token_indexes_range_.first < 0) {
const auto& child_nodes = node.Children();
CHECK(!child_nodes.empty());
CHECK_LT(token_indexes_range_.second, 0);
node_tokens.set_begin(child_nodes.front().Value().TokensRange().begin());
node_tokens.set_end(child_nodes.back().Value().TokensRange().end());
} else {
CHECK_GE(token_indexes_range_.second, token_indexes_range_.first);
node_tokens.set_begin(tokens.begin() + token_indexes_range_.first);
node_tokens.set_end(tokens.begin() + token_indexes_range_.second);
}
node.Value() = UnwrappedLine(indent_, node_tokens.begin(), policy_);
node.Value().SpanUpToToken(node_tokens.end());
return node;
}
::testing::AssertionResult TokenPartitionTreesEqualPredFormat(
const char* actual_expr, const char* expected_expr,
const TokenPartitionTree& actual, const TokenPartitionTree& expected) {
const auto diff = DeepEqual(actual, expected, PartitionsEqual);
if (diff.left != nullptr) {
return ::testing::AssertionFailure()
<< "Expected equality of these trees:\n"
"Actual:\n"
<< actual
<< "\n"
"Expected:\n"
<< expected << "\n";
}
return ::testing::AssertionSuccess();
}
} // namespace verible