#!/usr/bin/env python3
# Copyright 2017 The Cobalt 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.
"""Path conversion test."""

import os
import unittest

from cobalt.build.path_conversion import ConvertPath


class PathConversionTest(unittest.TestCase):

  def testNoop(self):
    self.assertEqual(ConvertPath('this/is/a/path.txt'), 'this/is/a/path.txt')

  def testOutputDirectory(self):
    self.assertEqual(
        ConvertPath('this/is/a/path.txt', output_directory='another/location'),
        os.path.join('another/location', 'path.txt'))

  def testAddPrefix(self):
    self.assertEqual(
        ConvertPath('this/is/a/path.txt', output_prefix='banana_'),
        os.path.join('this/is/a', 'banana_path.txt'))

  def testChangeExtension(self):
    self.assertEqual(
        ConvertPath('this/is/a/path.txt', output_extension='clown'),
        'this/is/a/path.clown')

  def testSlashes(self):
    self.assertEqual(
        ConvertPath('this\\is\\a\\path.txt', forward_slashes=True),
        'this/is/a/path.txt')

    self.assertEqual(
        ConvertPath('this\\is\\a\\path.txt', forward_slashes=False),
        'this\\is\\a\\path.txt')

  def testBaseDirectory(self):
    self.assertEqual(
        ConvertPath(
            'if/this/is/a/path.txt',
            output_directory='then/that',
            base_directory='if/this'),
        os.path.join('then/that', 'is', 'a', 'path.txt'))


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