# 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_ide.cpp"""

import json
from pathlib import Path
from typing import cast
import unittest

# pylint: disable=protected-access
from pw_ide.cpp import (
    COMPDB_FILE_NAME,
    command_parts,
    path_to_executable,
    CppCompilationDatabase,
    CppCompilationDatabasesMap,
    CppCompileCommand,
    CppCompileCommandDict,
    CppIdeFeaturesTarget,
    CppIdeFeaturesState,
    infer_target,
    _infer_target_pos,
)

from pw_ide.exceptions import UnresolvablePathException

from test_cases import PwIdeTestCase


class TestPathToExecutable(PwIdeTestCase):
    """Tests path_to_executable"""

    def test_valid_absolute_path_in_env_returns_same_path(self):
        executable_path = self.temp_dir_path / 'clang'
        query_drivers = [f'{self.temp_dir_path}/*']
        result = path_to_executable(
            str(executable_path.absolute()), path_globs=query_drivers
        )
        self.assertIsNotNone(result)
        self.assertEqual(str(result), str(executable_path.absolute()))

    def test_valid_absolute_path_outside_env_returns_same_path(self):
        executable_path = Path('/usr/bin/clang')
        query_drivers = ['/**/*']
        result = path_to_executable(
            str(executable_path.absolute()), path_globs=query_drivers
        )
        self.assertIsNotNone(result)
        self.assertEqual(str(result), str(executable_path.absolute()))

    def test_valid_relative_path_returns_same_path(self):
        executable_path = Path('../clang')
        query_drivers = [f'{self.temp_dir_path}/*']
        result = path_to_executable(
            str(executable_path), path_globs=query_drivers
        )
        self.assertIsNotNone(result)
        self.assertEqual(str(result), str(executable_path))

    def test_valid_no_path_returns_new_path(self):
        executable_path = Path('clang')
        query_drivers = [f'{self.temp_dir_path}/*']
        expected_path = self.temp_dir_path / executable_path
        self.touch_temp_file(expected_path)
        result = path_to_executable(
            str(executable_path), path_globs=query_drivers
        )
        self.assertIsNotNone(result)
        self.assertEqual(str(result), str(expected_path))

    def test_invalid_absolute_path_in_env_returns_same_path(self):
        executable_path = self.temp_dir_path / '_pw_invalid_exe'
        query_drivers = [f'{self.temp_dir_path}/*']
        result = path_to_executable(
            str(executable_path.absolute()), path_globs=query_drivers
        )
        self.assertIsNone(result)

    def test_invalid_absolute_path_outside_env_returns_same_path(self):
        executable_path = Path('/usr/bin/_pw_invalid_exe')
        query_drivers = ['/**/*']
        result = path_to_executable(
            str(executable_path.absolute()), path_globs=query_drivers
        )
        self.assertIsNone(result)

    def test_invalid_relative_path_returns_same_path(self):
        executable_path = Path('../_pw_invalid_exe')
        query_drivers = [f'{self.temp_dir_path}/*']
        result = path_to_executable(
            str(executable_path), path_globs=query_drivers
        )
        self.assertIsNone(result)

    def test_invalid_no_path_returns_new_path(self):
        executable_path = Path('_pw_invalid_exe')
        query_drivers = [f'{self.temp_dir_path}/*']
        expected_path = self.temp_dir_path / executable_path
        self.touch_temp_file(expected_path)
        result = path_to_executable(
            str(executable_path), path_globs=query_drivers
        )
        self.assertIsNone(result)


class TestInferTarget(unittest.TestCase):
    """Tests infer_target"""

    def test_infer_target_pos(self):
        test_cases = [
            ('?', [0]),
            ('*/?', [1]),
            ('*/*/?', [2]),
            ('*/?/?', [1, 2]),
        ]

        for glob, result in test_cases:
            self.assertEqual(_infer_target_pos(glob), result)

    def test_infer_target(self):
        test_cases = [
            ('?', 'target/thing.o', 'target'),
            ('*/?', 'variants/target/foo/bar/thing.o', 'target'),
            ('*/*/*/*/?', 'foo/bar/baz/hi/target/obj/thing.o', 'target'),
            ('*/?/?', 'variants/target/foo/bar/thing.o', 'target_foo'),
        ]

        for glob, output_path, result in test_cases:
            self.assertEqual(
                infer_target(glob, Path(''), Path(output_path)), result
            )


class TestCppCompileCommand(PwIdeTestCase):
    """Tests CppCompileCommand"""

    def run_process_test_with_valid_commands(
        self, command: str, expected_executable: str | None
    ) -> None:
        compile_command = CppCompileCommand(
            command=command, file='', directory=''
        )
        processed_compile_command = cast(
            CppCompileCommand,
            compile_command.process(default_path=self.temp_dir_path),
        )
        self.assertIsNotNone(processed_compile_command)
        self.assertEqual(
            processed_compile_command.executable_name, expected_executable
        )

    def run_process_test_with_invalid_commands(self, command: str) -> None:
        compile_command = CppCompileCommand(
            command=command, file='', directory=''
        )

        with self.assertRaises(UnresolvablePathException):
            compile_command.process(default_path=self.temp_dir_path)

    def test_process_valid_with_gn_compile_command(self) -> None:
        """Test output against typical GN-generated compile commands."""

        cases: list[dict[str, str]] = [
            {
                # pylint: disable=line-too-long
                'command': 'arm-none-eabi-g++ -MMD -MF  stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d  -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_ARMV7M_ENABLE_FPU=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
                'executable': 'arm-none-eabi-g++',
            },
            {
                # pylint: disable=line-too-long
                'command': '../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d  -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
                'executable': 'clang++',
            },
        ]

        for case in cases:
            self.run_process_test_with_valid_commands(
                case['command'], case['executable']
            )

    def test_process_invalid_with_gn_compile_command(self) -> None:
        """Test output against typical GN-generated compile commands."""

        # pylint: disable=line-too-long
        command = "python ../pw_toolchain/py/pw_toolchain/clang_tidy.py  --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*'  --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/freelist.cc --source-root '../' --export-fixes  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o.d  -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_containers/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/freelist.cc -o  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o && touch  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/freelist.freelist.cc.o"
        # pylint: enable=line-too-long

        compile_command = CppCompileCommand(
            command=command, file='', directory=''
        )
        self.assertIsNone(
            compile_command.process(default_path=self.temp_dir_path)
        )

    def test_process_unresolvable_with_gn_compile_command(self) -> None:
        """Test output against typical GN-generated compile commands."""

        # pylint: disable=line-too-long
        command = 'clang++ -MMD -MF  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d  -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o'
        # pylint: enable=line-too-long

        compile_command = CppCompileCommand(
            command=command, file='', directory=''
        )

        processed_compile_command = cast(
            CppCompileCommand, compile_command.process()
        )
        self.assertIsNotNone(processed_compile_command)
        self.assertIsNotNone(processed_compile_command.command)
        # .split() to avoid failing on whitespace differences.
        self.assertCountEqual(
            cast(str, processed_compile_command.command).split(),
            command.split(),
        )

    def test_process_unresolvable_strict_with_gn_compile_command(self) -> None:
        """Test output against typical GN-generated compile commands."""

        # pylint: disable=line-too-long
        command = 'clang++ -MMD -MF  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d  -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o'
        # pylint: enable=line-too-long

        compile_command = CppCompileCommand(
            command=command, file='', directory=''
        )

        with self.assertRaises(UnresolvablePathException):
            compile_command.process(strict=True)

    def test_process_blank_with_gn_compile_command(self) -> None:
        """Test output against typical GN-generated compile commands."""

        command = ''
        compile_command = CppCompileCommand(
            command=command, file='', directory=''
        )

        result = compile_command.process(default_path=self.temp_dir_path)
        self.assertIsNone(result)


class TestCommandParts(unittest.TestCase):
    """Test command_parts"""

    def test_command_parts(self):
        """Test command_parts"""

        # pylint: disable=line-too-long
        test_cases = [
            "python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/block.cc --source-root '../' --export-fixes  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o",
            'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
            '../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o',
            '../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
            'ccache arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
            'ccache ../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o',
            'ccache ../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
            'ccache debug=true max_size=10G arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
            'ccache debug=true max_size=10G ../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o',
            'ccache debug=true max_size=10G ../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
            "ccache python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/block.cc --source-root '../' --export-fixes  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o",
        ]

        expected_results = [
            (
                None,
                'python',
                [
                    '../pw_toolchain/py/pw_toolchain/clang_tidy.py',
                    '--source-exclude',
                    "'third_party/.*'",
                    '--source-exclude',
                    "'.*packages/mbedtls.*'",
                    '--source-exclude',
                    "'.*packages/boringssl.*'",
                    '--skip-include-path',
                    "'mbedtls/include'",
                    '--skip-include-path',
                    "'mbedtls'",
                    '--skip-include-path',
                    "'boringssl/src/include'",
                    '--skip-include-path',
                    "'boringssl'",
                    '--skip-include-path',
                    "'pw_tls_client/generate_test_data'",
                    '--source-file',
                    '../pw_allocator/block.cc',
                    '--source-root',
                    "'../'",
                    '--export-fixes',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml',
                    '--',
                    '../environment/cipd/packages/pigweed/bin/clang++',
                    'END_OF_INVOKER',
                    '-MMD',
                    '-MF',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o',
                    '&&',
                    'touch',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                None,
                'arm-none-eabi-g++',
                [
                    '-MMD',
                    '-MF',
                    'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-Wno-psabi',
                    '-mabi=aapcs',
                    '-mthumb',
                    '--sysroot=../environment/cipd/packages/arm',
                    '-specs=nano.specs',
                    '-specs=nosys.specs',
                    '-mcpu=cortex-m4',
                    '-mfloat-abi=hard',
                    '-mfpu=fpv4-sp-d16',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-u_printf_float',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-DPW_ARMV7M_ENABLE_FPU=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/assert_compatibility_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                None,
                '../environment/cipd/packages/pigweed/bin/isosceles-clang++',
                [
                    '-MMD',
                    '-MF',
                    'isosceles_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'isosceles_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                None,
                '../environment/cipd/packages/pigweed/bin/clang++',
                [
                    '-MMD',
                    '-MF',
                    'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache',
                'arm-none-eabi-g++',
                [
                    '-MMD',
                    '-MF',
                    'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-Wno-psabi',
                    '-mabi=aapcs',
                    '-mthumb',
                    '--sysroot=../environment/cipd/packages/arm',
                    '-specs=nano.specs',
                    '-specs=nosys.specs',
                    '-mcpu=cortex-m4',
                    '-mfloat-abi=hard',
                    '-mfpu=fpv4-sp-d16',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-u_printf_float',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-DPW_ARMV7M_ENABLE_FPU=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/assert_compatibility_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache',
                '../environment/cipd/packages/pigweed/bin/isosceles-clang++',
                [
                    '-MMD',
                    '-MF',
                    'isosceles_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'isosceles_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache',
                '../environment/cipd/packages/pigweed/bin/clang++',
                [
                    '-MMD',
                    '-MF',
                    'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache debug=true max_size=10G',
                'arm-none-eabi-g++',
                [
                    '-MMD',
                    '-MF',
                    'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-Wno-psabi',
                    '-mabi=aapcs',
                    '-mthumb',
                    '--sysroot=../environment/cipd/packages/arm',
                    '-specs=nano.specs',
                    '-specs=nosys.specs',
                    '-mcpu=cortex-m4',
                    '-mfloat-abi=hard',
                    '-mfpu=fpv4-sp-d16',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-u_printf_float',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-DPW_ARMV7M_ENABLE_FPU=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/assert_compatibility_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache debug=true max_size=10G',
                '../environment/cipd/packages/pigweed/bin/isosceles-clang++',
                [
                    '-MMD',
                    '-MF',
                    'isosceles_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'isosceles_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache debug=true max_size=10G',
                '../environment/cipd/packages/pigweed/bin/clang++',
                [
                    '-MMD',
                    '-MF',
                    'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                ],
            ),
            (
                'ccache',
                'python',
                [
                    '../pw_toolchain/py/pw_toolchain/clang_tidy.py',
                    '--source-exclude',
                    "'third_party/.*'",
                    '--source-exclude',
                    "'.*packages/mbedtls.*'",
                    '--source-exclude',
                    "'.*packages/boringssl.*'",
                    '--skip-include-path',
                    "'mbedtls/include'",
                    '--skip-include-path',
                    "'mbedtls'",
                    '--skip-include-path',
                    "'boringssl/src/include'",
                    '--skip-include-path',
                    "'boringssl'",
                    '--skip-include-path',
                    "'pw_tls_client/generate_test_data'",
                    '--source-file',
                    '../pw_allocator/block.cc',
                    '--source-root',
                    "'../'",
                    '--export-fixes',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml',
                    '--',
                    '../environment/cipd/packages/pigweed/bin/clang++',
                    'END_OF_INVOKER',
                    '-MMD',
                    '-MF',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d',
                    '-g3',
                    '--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',
                    '-Og',
                    '-Wshadow',
                    '-Wredundant-decls',
                    '-Wthread-safety',
                    '-Wswitch-enum',
                    '-fdiagnostics-color',
                    '-g',
                    '-fno-common',
                    '-fno-exceptions',
                    '-ffunction-sections',
                    '-fdata-sections',
                    '-Wall',
                    '-Wextra',
                    '-Wimplicit-fallthrough',
                    '-Wcast-qual',
                    '-Wundef',
                    '-Wpointer-arith',
                    '-Werror',
                    '-Wno-error=cpp',
                    '-Wno-error=deprecated-declarations',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-ffile-prefix-map=/pigweed/pigweed/=',
                    '-ffile-prefix-map=../=',
                    '-ffile-prefix-map=/pigweed/pigweed/out=out',
                    '-Wextra-semi',
                    '-fno-rtti',
                    '-Wnon-virtual-dtor',
                    '-std=c++17',
                    '-Wno-register',
                    '-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1',
                    '-DPW_STATUS_CFG_CHECK_IF_USED=1',
                    '-I../pw_allocator/public',
                    '-I../pw_assert/public',
                    '-I../pw_assert/print_and_abort_assert_public_overrides',
                    '-I../pw_preprocessor/public',
                    '-I../pw_assert_basic/public_overrides',
                    '-I../pw_assert_basic/public',
                    '-I../pw_span/public',
                    '-I../pw_polyfill/public',
                    '-I../pw_polyfill/standard_library_public',
                    '-I../pw_status/public',
                    '-c',
                    '../pw_allocator/block.cc',
                    '-o',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o',
                    '&&',
                    'touch',
                    'pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o',
                ],
            ),
        ]
        # pylint: enable=line-too-long

        for test_case, expected in zip(test_cases, expected_results):
            self.assertEqual(command_parts(test_case), expected)


class TestCppCompilationDatabase(PwIdeTestCase):
    """Tests CppCompilationDatabase"""

    def setUp(self):
        self.root_dir = Path('/pigweed/pigweed/out')

        self.fixture: list[CppCompileCommandDict] = [
            {
                # pylint: disable=line-too-long
                'command': 'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
                'directory': '/pigweed/pigweed/out',
                'file': '../pw_allocator/block.cc',
            },
            {
                # pylint: disable=line-too-long
                'command': '../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
                'directory': '/pigweed/pigweed/out',
                'file': '../pw_allocator/block.cc',
            },
        ]

        self.expected: list[CppCompileCommandDict] = [
            {
                **self.fixture[0],
                # pylint: disable=line-too-long
                'output': 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
            },
            {
                **self.fixture[1],
                # pylint: disable=line-too-long
                'output': 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
            },
        ]

        self.fixture_merge_1 = [
            {
                # pylint: disable=line-too-long
                'command': 'g++ -MMD -MF  pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o',
                'directory': '/pigweed/pigweed/out',
                'file': '../pw_allocator/block.cc',
                'output': 'pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o',
                # pylint: enable=line-too-long
            },
            {
                # pylint: disable=line-too-long
                'command': 'g++ -MMD -MF  pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=//pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_containers/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -I../pw_status/public -c ../pw_allocator/freelist.cc -o  pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o',
                'directory': '/pigweed/pigweed/out',
                'file': '../pw_allocator/freelist.cc',
                'output': 'pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o',
                # pylint: enable=line-too-long
            },
        ]

        self.fixture_merge_2 = [
            {
                # pylint: disable=line-too-long
                'command': 'g++ -MMD -MF  pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true  -I../pw_base64/public -I../pw_string/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -c ../pw_base64/base64.cc -o  pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o',
                'directory': '/pigweed/pigweed/out',
                'file': '../pw_base64/base64.cc',
                'output': 'pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o',
                # pylint: enable=line-too-long
            },
            {
                # pylint: disable=line-too-long
                'command': 'g++ -MMD -MF  pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_checksum/public -I../pw_bytes/public -I../pw_containers/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_preprocessor/public -I../pw_span/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_status/public -c ../pw_checksum/crc32.cc -o  pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o',
                'directory': 'pigweed/pigweed/out',
                'file': '../pw_checksum/crc32.cc',
                'output': 'pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o',
                # pylint: enable=line-too-long
            },
        ]

        return super().setUp()

    def test_merge(self):
        compdb1 = CppCompilationDatabase.load(
            self.fixture_merge_1, self.root_dir
        )
        compdb2 = CppCompilationDatabase.load(
            self.fixture_merge_2, self.root_dir
        )
        compdb1.merge(compdb2)
        result = [compile_command.as_dict() for compile_command in compdb1]
        expected = [*self.fixture_merge_1, *self.fixture_merge_2]
        self.assertCountEqual(result, expected)

    def test_merge_no_dupes(self):
        compdb1 = CppCompilationDatabase.load(
            self.fixture_merge_1, self.root_dir
        )
        fixture_combo = [*self.fixture_merge_1, *self.fixture_merge_2]
        compdb2 = CppCompilationDatabase.load(fixture_combo, self.root_dir)
        compdb1.merge(compdb2)
        result = [compile_command.as_dict() for compile_command in compdb1]
        expected = [*self.fixture_merge_1, *self.fixture_merge_2]
        self.assertCountEqual(result, expected)

    def test_load_from_dicts(self):
        compdb = CppCompilationDatabase.load(self.fixture, self.root_dir)
        self.assertCountEqual(compdb.as_dicts(), self.expected)

    def test_load_from_json(self):
        compdb = CppCompilationDatabase.load(
            json.dumps(self.fixture), self.root_dir
        )
        self.assertCountEqual(compdb.as_dicts(), self.expected)

    def test_load_from_path(self):
        with self.make_temp_file(
            COMPDB_FILE_NAME,
            json.dumps(self.fixture),
        ) as (_, file_path):
            path = file_path

        compdb = CppCompilationDatabase.load(path, self.root_dir)
        self.assertCountEqual(compdb.as_dicts(), self.expected)

    def test_load_from_file_handle(self):
        with self.make_temp_file(
            COMPDB_FILE_NAME,
            json.dumps(self.fixture),
        ) as (file, _):
            compdb = CppCompilationDatabase.load(file, self.root_dir)

        self.assertCountEqual(compdb.as_dicts(), self.expected)

    def test_process(self):
        """Test processing against a typical sample of raw output from GN."""

        targets = [
            'pw_strict_host_clang_debug',
            'stm32f429i_disc1_debug',
            'isosceles_debug',
        ]

        settings = self.make_ide_settings(targets_include=targets)

        # pylint: disable=line-too-long
        raw_db: list[CppCompileCommandDict] = [
            {
                'command': 'arm-none-eabi-g++ -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                'directory': str(self.root_dir),
                'file': '../pw_allocator/block.cc',
            },
            {
                'command': '../environment/cipd/packages/pigweed/bin/isosceles-clang++ -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o',
                'directory': str(self.root_dir),
                'file': '../pw_allocator/block.cc',
            },
            {
                'command': 'ccache ../environment/cipd/packages/pigweed/bin/clang++ -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                'directory': str(self.root_dir),
                'file': '../pw_allocator/block.cc',
            },
            {
                'command': "python ../pw_toolchain/py/pw_toolchain/clang_tidy.py --source-exclude 'third_party/.*' --source-exclude '.*packages/mbedtls.*' --source-exclude '.*packages/boringssl.*' --skip-include-path 'mbedtls/include' --skip-include-path 'mbedtls' --skip-include-path 'boringssl/src/include' --skip-include-path 'boringssl' --skip-include-path 'pw_tls_client/generate_test_data' --source-file ../pw_allocator/block.cc --source-root '../' --export-fixes  pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.yaml -- ../environment/cipd/packages/pigweed/bin/clang++ END_OF_INVOKER -MMD -MF pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o && touch pw_strict_host_clang_debug.static_analysis/obj/pw_allocator/block.block.cc.o",
                'directory': str(self.root_dir),
                'file': '../pw_allocator/block.cc',
            },
        ]

        expected_compdbs = {
            'isosceles_debug': [
                {
                    'command':
                    # Ensures path format matches OS (e.g. Windows)
                    f'{Path("../environment/cipd/packages/pigweed/bin/isosceles-clang++")} -MMD -MF isosceles_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o isosceles_debug/obj/pw_allocator/block.block.cc.o',
                    'directory': str(self.root_dir),
                    'file': '../pw_allocator/block.cc',
                    'output': 'isosceles_debug/obj/pw_allocator/block.block.cc.o',
                },
            ],
            'pw_strict_host_clang_debug': [
                {
                    'command':
                    # Ensures path format matches OS (e.g. Windows)
                    f'ccache {Path("../environment/cipd/packages/pigweed/bin/clang++")} -MMD -MF pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o.d -g3 --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -Og -Wshadow -Wredundant-decls -Wthread-safety -Wswitch-enum -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS=1 -DPW_STATUS_CFG_CHECK_IF_USED=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                    'directory': str(self.root_dir),
                    'file': '../pw_allocator/block.cc',
                    'output': 'pw_strict_host_clang_debug/obj/pw_allocator/block.block.cc.o',
                },
            ],
            'stm32f429i_disc1_debug': [
                {
                    'command':
                    # Ensures this test avoids the unpathed compiler search
                    f'{self.temp_dir_path / "arm-none-eabi-g++"} -MMD -MF stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o.d -Wno-psabi -mabi=aapcs -mthumb --sysroot=../environment/cipd/packages/arm -specs=nano.specs -specs=nosys.specs -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Og -Wshadow -Wredundant-decls -u_printf_float -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register -DPW_ARMV7M_ENABLE_FPU=1 -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/assert_compatibility_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                    'directory': str(self.root_dir),
                    'file': '../pw_allocator/block.cc',
                    'output': 'stm32f429i_disc1_debug/obj/pw_allocator/block.block.cc.o',
                },
            ],
        }
        # pylint: enable=line-too-long

        compdbs = CppCompilationDatabase.load(
            raw_db, root_dir=self.root_dir
        ).process(settings, default_path=self.temp_dir_path)
        compdbs_as_dicts = {
            target: compdb.as_dicts() for target, compdb in compdbs.items()
        }

        self.assertCountEqual(
            list(compdbs_as_dicts.keys()), list(expected_compdbs.keys())
        )
        self.assertDictEqual(compdbs_as_dicts, expected_compdbs)


class TestCppCompilationDatabasesMap(PwIdeTestCase):
    """Tests CppCompilationDatabasesMap"""

    def setUp(self):
        # pylint: disable=line-too-long
        self.fixture_1 = lambda target: [
            CppCompileCommand(
                **{
                    'command': f'g++ -MMD -MF  {target}/obj/pw_allocator/block.block.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_span/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_status/public -c ../pw_allocator/block.cc -o  pw_strict_host_gcc_debug/obj/pw_allocator/block.block.cc.o',
                    'directory': '/pigweed/pigweed/out',
                    'file': '../pw_allocator/block.cc',
                }
            ),
            CppCompileCommand(
                **{
                    'command': f'g++ -MMD -MF  {target}/obj/pw_allocator/freelist.freelist.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=//pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_allocator/public -I../pw_containers/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -I../pw_status/public -c ../pw_allocator/freelist.cc -o  pw_strict_host_gcc_debug/obj/pw_allocator/freelist.freelist.cc.o',
                    'directory': '/pigweed/pigweed/out',
                    'file': '../pw_allocator/freelist.cc',
                }
            ),
        ]

        self.fixture_2 = lambda target: [
            CppCompileCommand(
                **{
                    'command': f'g++ -MMD -MF  {target}/obj/pw_base64/pw_base64.base64.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true  -I../pw_base64/public -I../pw_string/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_preprocessor/public -I../pw_assert_basic/public_overrides -I../pw_assert_basic/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_span/public -c ../pw_base64/base64.cc -o  pw_strict_host_gcc_debug/obj/pw_base64/pw_base64.base64.cc.o',
                    'directory': '/pigweed/pigweed/out',
                    'file': '../pw_base64/base64.cc',
                }
            ),
            CppCompileCommand(
                **{
                    'command': f'g++ -MMD -MF  {target}/obj/pw_checksum/pw_checksum.crc32.cc.o.d  -Wno-psabi -Og -Wshadow -Wredundant-decls -Wswitch-enum -Wpedantic -Wno-c++20-designator -Wno-gnu-zero-variadic-macro-arguments -fdiagnostics-color -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wimplicit-fallthrough -Wcast-qual -Wundef -Wpointer-arith -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -ffile-prefix-map=/pigweed/pigweed/out=out -ffile-prefix-map=/pigweed/pigweed/= -ffile-prefix-map=../= -ffile-prefix-map=/pigweed/pigweed/out=out  -Wextra-semi -fno-rtti -Wnon-virtual-dtor -std=c++17 -Wno-register  -DPW_SPAN_ENABLE_ASSERTS=true -DPW_STATUS_CFG_CHECK_IF_USED=1  -I../pw_checksum/public -I../pw_bytes/public -I../pw_containers/public -I../pw_polyfill/public -I../pw_polyfill/standard_library_public -I../pw_preprocessor/public -I../pw_span/public -I../pw_assert/public -I../pw_assert/print_and_abort_assert_public_overrides -I../pw_status/public -c ../pw_checksum/crc32.cc -o  pw_strict_host_gcc_debug/obj/pw_checksum/pw_checksum.crc32.cc.o',
                    'directory': 'pigweed/pigweed/out',
                    'file': '../pw_checksum/crc32.cc',
                }
            ),
        ]
        # pylint: enable=line-too-long
        super().setUp()

    def test_merge_0_db_set(self):
        with self.assertRaises(ValueError):
            CppCompilationDatabasesMap.merge()

    def test_merge_1_db_set(self):
        settings = self.make_ide_settings()
        target = 'test_target'
        db_set = CppCompilationDatabasesMap(settings)
        db_set[target] = self.fixture_1(target)
        result = CppCompilationDatabasesMap.merge(db_set)
        self.assertCountEqual(result._dbs, db_set._dbs)

    def test_merge_2_db_sets_different_targets(self):
        settings = self.make_ide_settings()
        target1 = 'test_target_1'
        target2 = 'test_target_2'
        db_set1 = CppCompilationDatabasesMap(settings)
        db_set1[target1] = self.fixture_1(target1)
        db_set2 = CppCompilationDatabasesMap(settings)
        db_set2[target2] = self.fixture_2(target2)
        result = CppCompilationDatabasesMap.merge(db_set1, db_set2)
        self.assertEqual(len(result), 2)
        self.assertCountEqual(result._dbs, {**db_set1._dbs, **db_set2._dbs})

    def test_merge_2_db_sets_duplicated_targets(self):
        settings = self.make_ide_settings()
        target1 = 'test_target_1'
        target2 = 'test_target_2'
        db_set1 = CppCompilationDatabasesMap(settings)
        db_set1[target1] = self.fixture_1(target1)
        db_set2 = CppCompilationDatabasesMap(settings)
        db_set2[target2] = self.fixture_2(target2)
        db_set_combo = CppCompilationDatabasesMap.merge(db_set1, db_set2)
        result = CppCompilationDatabasesMap.merge(db_set1, db_set_combo)
        self.assertEqual(len(result), 2)
        self.assertCountEqual(result._dbs, {**db_set1._dbs, **db_set2._dbs})

    def test_cascade_disabled(self):
        settings = self.make_ide_settings(
            cascade_targets=False,
            targets_include=['test_target_1', 'test_target_2'],
        )
        target1 = 'test_target_1'
        target2 = 'test_target_2'
        db_set = CppCompilationDatabasesMap(settings)
        db_set[target1] = self.fixture_1(target1)
        db_set[target2] = self.fixture_2(target2)
        result = db_set._compdb_to_write(target1)
        self.assertCountEqual(result._db, [*db_set[target1]])

    def test_cascade_enabled(self):
        settings = self.make_ide_settings(
            cascade_targets=True,
            targets_include=['test_target_1', 'test_target_2'],
        )
        target1 = 'test_target_1'
        target2 = 'test_target_2'
        db_set = CppCompilationDatabasesMap(settings)
        db_set[target1] = self.fixture_1(target1)
        db_set[target2] = self.fixture_2(target2)
        result = db_set._compdb_to_write(target1)
        self.assertCountEqual(result._db, [*db_set[target1], *db_set[target2]])


class TestCppIdeFeaturesState(PwIdeTestCase):
    """Test CppIdeFeaturesState"""

    def test_targets_all(self):
        all_targets = {
            "a": CppIdeFeaturesTarget("a", Path("/dev/null"), 1),
            "b": CppIdeFeaturesTarget("b", Path("/dev/null"), 1),
            "c": CppIdeFeaturesTarget("c", Path("/dev/null"), 1),
        }

        settings = self.make_ide_settings()
        state = CppIdeFeaturesState(settings)
        state.targets = all_targets
        self.assertListEqual(list(state.targets.keys()), ["a", "b", "c"])

    def test_targets_exclude(self):
        all_targets = {
            "a": CppIdeFeaturesTarget("a", Path("/dev/null"), 1),
            "b": CppIdeFeaturesTarget("b", Path("/dev/null"), 1),
            "c": CppIdeFeaturesTarget("c", Path("/dev/null"), 1),
        }

        settings = self.make_ide_settings(targets_exclude=["a"])
        state = CppIdeFeaturesState(settings)
        state.targets = all_targets
        self.assertListEqual(list(state.targets.keys()), ["b", "c"])

    def test_targets_include(self):
        all_targets = {
            "a": CppIdeFeaturesTarget("a", Path("/dev/null"), 1),
            "b": CppIdeFeaturesTarget("b", Path("/dev/null"), 1),
            "c": CppIdeFeaturesTarget("c", Path("/dev/null"), 1),
        }

        settings = self.make_ide_settings(targets_include=["a"])
        state = CppIdeFeaturesState(settings)
        state.targets = all_targets
        self.assertListEqual(list(state.targets.keys()), ["a"])


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