# Copyright 2022 The Bazel Authors. All rights reserved.
#
# 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.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import unittest
from absl.testing import parameterized
from scripts.docs import rewriter


class CanRewriteTest(parameterized.TestCase):

  @parameterized.parameters(("/file/doc.md", True),
                            ("http://www.bazel.build/foo.html", True),
                            ("/dir/test.txt", False),
                            ("/images/aspects.svg", False))
  def testCanRewrite(self, path, expected_can_rewrite):
    self.assertEqual(rewriter.can_rewrite(path), expected_can_rewrite)


def read_data_file(basename, in_or_out_fragment):
  path = os.path.join(
      os.getenv("TEST_SRCDIR"),
      os.getenv("TEST_WORKSPACE"),
      "scripts/docs/testdata",
      in_or_out_fragment, basename)
  with open(path, "rt", encoding="utf-8") as f:
    return path, f.read()


class RewriteLinksTest(parameterized.TestCase):

  @parameterized.parameters(("doc.md"),
                            ("markdown_with_html.md"), ("site.html"))
  def testRewrite(self, basename):
    input_path, content = read_data_file(basename, "input")
    _, version = read_data_file("VERSION", "input")

    actual = rewriter.rewrite_links(input_path, content, basename, version)

    _, expected = read_data_file(basename, "expected_output")

    self.assertEqual(actual, expected)


if __name__ == "__main__":
  unittest.main()
