# 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


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()
