# Copyright 2020 The Pigweed 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
#
#     https://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.
"""Tests for arduinobuilder."""

import shlex
import unittest
from parameterized import parameterized  # type: ignore


class TestShellArgumentSplitting(unittest.TestCase):
    """Tests to ensure shlex.split handles expected use cases."""

    @parameterized.expand([
        (
            "remove-both-quotes",
            """ -DUSB_CONFIG_POWER=100 """
            """ '-DUSB_MANUFACTURER="Adafruit LLC"' """
            """ '-DUSB_PRODUCT="Adafruit PyGamer Advance M4"' """
            """ "-I$HOME/samd/1.6.2/cores/arduino/TinyUSB" """,
            [
                """ -DUSB_CONFIG_POWER=100 """.strip(),
                """ -DUSB_MANUFACTURER="Adafruit LLC" """.strip(),
                """ -DUSB_PRODUCT="Adafruit PyGamer Advance M4" """.strip(),
                """ -I$HOME/samd/1.6.2/cores/arduino/TinyUSB """.strip(),
            ]
        )
    ]) # yapf: disable
    def test_split_arguments_and_remove_quotes(self, unused_test_name,
                                               input_string, expected):
        """Test splitting a string into a list of arguments with quotes removed.
        """
        result = shlex.split(input_string)
        self.assertEqual(result, expected)


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