# Copyright 2022 Google Inc. 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 flatc_test import *


class CppTests:

  def Flatten(self):
    # Generate just foo with a "flatten" import of bar.
    flatc(["--cpp", "foo.fbs"])

    # Foo should be generated in place and include bar flatten
    assert_file_and_contents("foo_generated.h", '#include "bar_generated.h"')

  def FlattenAbsolutePath(self):
    # Generate just foo with a "flatten" import of bar.
    flatc(["--cpp", make_absolute("foo.fbs")])

    # Foo should be generated in place and include bar flatten
    assert_file_and_contents("foo_generated.h", '#include "bar_generated.h"')

  def FlattenSubDirectory(self):
    # Generate just foo with a "flatten" import of bar.
    flatc(["--cpp", "bar/bar.fbs"])

    # Bar should be generated in place and include baz
    assert_file_and_contents("bar_generated.h", '#include "baz_generated.h"')

  def FlattenOutPath(self):
    # Generate just foo with a "flatten" import of bar.
    flatc(["--cpp", "-o", ".tmp", "foo.fbs"])

    # Foo should be generated in the out path and include bar flatten to the out path.
    assert_file_and_contents(
        ".tmp/foo_generated.h", '#include "bar_generated.h"'
    )

  def FlattenOutPathSuperDirectory(self):
    # Generate just foo with a "flatten" import of bar.
    flatc(["--cpp", "-o", "../.tmp", "foo.fbs"])

    # Foo should be generated in the out path and include bar flatten to the out path.
    assert_file_and_contents(
        "../.tmp/foo_generated.h", '#include "bar_generated.h"'
    )

  def FlattenOutPathSubDirectory(self):
    # Generate just foo with a "flatten" import of bar.
    flatc(["--cpp", "-o", ".tmp", "bar/bar.fbs"])

    # Bar should be generated in the out path and include baz flatten to the out path.
    assert_file_and_contents(
        ".tmp/bar_generated.h", '#include "baz_generated.h"'
    )

  def KeepPrefix(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", "foo.fbs"])

    assert_file_and_contents(
        "foo_generated.h", '#include "bar/bar_generated.h"'
    )

  def KeepPrefixAbsolutePath(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", make_absolute("foo.fbs")])

    assert_file_and_contents(
        "foo_generated.h", '#include "bar/bar_generated.h"'
    )

  def KeepPrefixSubDirectory(self):
    # Generate with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", "bar/bar.fbs"])

    assert_file_and_contents(
        "bar_generated.h", '#include "baz/baz_generated.h"'
    )

  def KeepPrefixOutPath(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", "-o", ".tmp", "foo.fbs"])

    assert_file_and_contents(
        ".tmp/foo_generated.h",
        '#include "bar/bar_generated.h"',
    )

  def KeepPrefixOutPathSubDirectory(self):
    # Generate with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", "-o", ".tmp", "bar/bar.fbs"])

    assert_file_and_contents(
        ".tmp/bar_generated.h", '#include "baz/baz_generated.h"'
    )

  def IncludePrefix(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--include-prefix", "test", "foo.fbs"])

    assert_file_and_contents(
        "foo_generated.h", '#include "test/bar_generated.h"'
    )

  def IncludePrefixAbolutePath(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--include-prefix", "test", make_absolute("foo.fbs")])

    assert_file_and_contents(
        "foo_generated.h", '#include "test/bar_generated.h"'
    )

  def IncludePrefixSubDirectory(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--include-prefix", "test", "bar/bar.fbs"])

    assert_file_and_contents(
        "bar_generated.h", '#include "test/baz_generated.h"'
    )

  def IncludePrefixOutPath(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--include-prefix", "test", "-o", ".tmp", "foo.fbs"])

    assert_file_and_contents(
        ".tmp/foo_generated.h", '#include "test/bar_generated.h"'
    )

  def IncludePrefixOutPathSubDirectory(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--include-prefix", "test", "-o", ".tmp", "bar/bar.fbs"])

    assert_file_and_contents(
        ".tmp/bar_generated.h", '#include "test/baz_generated.h"'
    )

  def KeepPrefixIncludePrefix(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", "--include-prefix", "test", "foo.fbs"])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        "foo_generated.h", '#include "test/bar/bar_generated.h"'
    )

  def KeepPrefixIncludePrefixAbsolutePath(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc([
        "--cpp",
        "--keep-prefix",
        "--include-prefix",
        "test",
        make_absolute("foo.fbs"),
    ])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        "foo_generated.h", '#include "test/bar/bar_generated.h"'
    )

  def KeepPrefixIncludePrefixSubDirectory(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc(["--cpp", "--keep-prefix", "--include-prefix", "test", "bar/bar.fbs"])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        "bar_generated.h", '#include "test/baz/baz_generated.h"'
    )

  def KeepPrefixIncludePrefixOutPathSubDirectory(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc([
        "--cpp",
        "--keep-prefix",
        "--include-prefix",
        "test",
        "-o",
        ".tmp",
        "bar/bar.fbs",
    ])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        ".tmp/bar_generated.h", '#include "test/baz/baz_generated.h"'
    )

  def KeepPrefixIncludePrefixOutPathSuperDirectory(self):
    # Generate just foo with the import of bar keeping the prefix of where it is located.
    flatc([
        "--cpp",
        "--keep-prefix",
        "--include-prefix",
        "test",
        "-o",
        "../.tmp",
        "bar/bar.fbs",
    ])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        "../.tmp/bar_generated.h", '#include "test/baz/baz_generated.h"'
    )

  def KeepPrefixIncludePrefixoutPathAbsoluePaths_SuperDirectoryReference(self):
    # Generate bar_with_foo that references a type in a super directory.
    flatc([
        "--cpp",
        "--keep-prefix",
        "--include-prefix",
        "generated",
        "-I",
        str(script_path.absolute()),
        "-o",
        str(Path(script_path, ".tmp").absolute()),
        str(Path(script_path, "bar/bar_with_foo.fbs").absolute()),
    ])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        ".tmp/bar_with_foo_generated.h",
        [
            '#include "generated/baz/baz_generated.h"',
            '#include "generated/foo_generated.h"',
        ],
    )

  def KeepPrefixIncludePrefixoutPath_SuperDirectoryReference(self):
    # Generate bar_with_foo that references a type in a super directory.
    flatc([
        "--cpp",
        "--keep-prefix",
        "--include-prefix",
        "generated",
        "-I",
        "./",
        "-o",
        ".tmp",
        "bar/bar_with_foo.fbs",
    ])

    # The include prefix should come first, with the kept prefix next.
    assert_file_and_contents(
        ".tmp/bar_with_foo_generated.h",
        [
            '#include "generated/baz/baz_generated.h"',
            '#include "generated/foo_generated.h"',
        ],
        unlink=False,
    )
