115 lines
3.7 KiB
Python
115 lines
3.7 KiB
Python
|
|
# Copyright 2022 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 pw_watch.build_recipe"""
|
||
|
|
|
||
|
|
from pathlib import Path
|
||
|
|
import shlex
|
||
|
|
import unittest
|
||
|
|
|
||
|
|
from parameterized import parameterized # type: ignore
|
||
|
|
|
||
|
|
from pw_build.build_recipe import BuildCommand
|
||
|
|
|
||
|
|
|
||
|
|
# pylint: disable=line-too-long
|
||
|
|
class TestBuildRecipe(unittest.TestCase):
|
||
|
|
"""Tests for creating BuildRecipes."""
|
||
|
|
|
||
|
|
def setUp(self):
|
||
|
|
self.maxDiff = None # pylint: disable=invalid-name
|
||
|
|
|
||
|
|
@parameterized.expand(
|
||
|
|
[
|
||
|
|
(
|
||
|
|
'build command using make',
|
||
|
|
BuildCommand(
|
||
|
|
build_dir=Path('outmake'),
|
||
|
|
build_system_command='make',
|
||
|
|
build_system_extra_args=['-k'],
|
||
|
|
targets=['maketarget1', 'maketarget2'],
|
||
|
|
),
|
||
|
|
# result
|
||
|
|
['make', '-k', '-C', 'outmake', 'maketarget1', 'maketarget2'],
|
||
|
|
),
|
||
|
|
(
|
||
|
|
'build command using bazel',
|
||
|
|
BuildCommand(
|
||
|
|
build_dir=Path('outbazel'),
|
||
|
|
build_system_command='bazel',
|
||
|
|
build_system_extra_args=[],
|
||
|
|
targets=['build', '//pw_analog/...', '//pw_assert/...'],
|
||
|
|
),
|
||
|
|
# result
|
||
|
|
[
|
||
|
|
'bazel',
|
||
|
|
'--output_base',
|
||
|
|
'outbazel',
|
||
|
|
'build',
|
||
|
|
'//pw_analog/...',
|
||
|
|
'//pw_assert/...',
|
||
|
|
],
|
||
|
|
),
|
||
|
|
(
|
||
|
|
'cmake shell command',
|
||
|
|
BuildCommand(
|
||
|
|
build_dir=Path('outcmake'),
|
||
|
|
command=shlex.split('cmake -G Ninja -S ./ -B outcmake'),
|
||
|
|
),
|
||
|
|
# result
|
||
|
|
['cmake', '-G', 'Ninja', '-S', './', '-B', 'outcmake'],
|
||
|
|
),
|
||
|
|
(
|
||
|
|
'gn shell command',
|
||
|
|
BuildCommand(
|
||
|
|
build_dir=Path('out'),
|
||
|
|
command=shlex.split('gn gen out --export-compile-commands'),
|
||
|
|
),
|
||
|
|
# result
|
||
|
|
['gn', 'gen', 'out', '--export-compile-commands'],
|
||
|
|
),
|
||
|
|
(
|
||
|
|
'python shell command',
|
||
|
|
BuildCommand(
|
||
|
|
build_dir=Path('outpytest'),
|
||
|
|
command=shlex.split(
|
||
|
|
'python pw_build/py/build_recipe_test.py'
|
||
|
|
),
|
||
|
|
),
|
||
|
|
# result
|
||
|
|
['python', 'pw_build/py/build_recipe_test.py'],
|
||
|
|
),
|
||
|
|
(
|
||
|
|
'gn shell command with a list',
|
||
|
|
BuildCommand(
|
||
|
|
build_dir=Path('out'),
|
||
|
|
command=['gn', 'gen', 'out', '--export-compile-commands'],
|
||
|
|
),
|
||
|
|
# result
|
||
|
|
['gn', 'gen', 'out', '--export-compile-commands'],
|
||
|
|
),
|
||
|
|
]
|
||
|
|
)
|
||
|
|
def test_build_command_get_args(
|
||
|
|
self,
|
||
|
|
_test_name,
|
||
|
|
build_command,
|
||
|
|
expected_args,
|
||
|
|
) -> None:
|
||
|
|
"""Test BuildCommand get_args."""
|
||
|
|
self.assertEqual(expected_args, build_command.get_args())
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
unittest.main()
|