// 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 "verilog/CST/match_test_utils.h"

#include <functional>
#include <sstream>
#include <vector>

#include "common/analysis/syntax_tree_search.h"
#include "common/analysis/syntax_tree_search_test_utils.h"
#include "common/text/text_structure.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "verilog/analysis/verilog_analyzer.h"

#undef ASSERT_OK
#define ASSERT_OK(value) ASSERT_TRUE((value).ok())

namespace verilog {

using verible::SyntaxTreeSearchTestCase;
using verible::TextStructureView;
using verible::TreeSearchMatch;

void TestVerilogSyntaxRangeMatches(
    absl::string_view test_name, const SyntaxTreeSearchTestCase &test_case,
    const std::function<std::vector<TreeSearchMatch>(const TextStructureView &)>
        &match_collector) {
  const absl::string_view code(test_case.code);
  // Parse Verilog source code into syntax tree.
  VerilogAnalyzer analyzer(code, "test-file");
  const TextStructureView &text_structure(analyzer.Data());
  const absl::string_view code_copy = text_structure.Contents();
  ASSERT_OK(analyzer.Analyze()) << test_name << " failed on:\n" << code;

  // Run the match collector to gather results.
  const std::vector<TreeSearchMatch> matches(match_collector(text_structure));

  // Evaluate set-difference of findings.
  std::ostringstream diffs;
  EXPECT_TRUE(test_case.ExactMatchFindings(matches, code_copy, &diffs))
      << test_name << " failed on:\n"
      << code << "\ndiffs:\n"
      << diffs.str();
}

}  // namespace verilog
