コード例 #1
0
ファイル: build_files_test.py プロジェクト: patricklaw/pants
def test_address_specs_do_not_exist(
        address_specs_rule_runner: RuleRunner) -> None:
    address_specs_rule_runner.write_files({
        "real/f.txt": "",
        "real/BUILD": "mock_tgt(sources=['f.txt'])",
        "empty/BUILD": "# empty"
    })

    def assert_resolve_error(specs: Iterable[AddressSpec], *,
                             expected: str) -> None:
        with pytest.raises(ExecutionError) as exc:
            resolve_address_specs(address_specs_rule_runner, specs)
        assert expected in str(exc.value)

    # Literal addresses require both a BUILD file to exist and for a target to be resolved.
    assert_resolve_error([AddressLiteralSpec("fake", "tgt")],
                         expected="'fake' does not exist on disk")
    assert_resolve_error(
        [AddressLiteralSpec("fake/f.txt", "tgt")],
        expected="'fake/f.txt' does not exist on disk",
    )
    did_you_mean = ResolveError.did_you_mean(bad_name="fake_tgt",
                                             known_names=["real"],
                                             namespace="real")
    assert_resolve_error([AddressLiteralSpec("real", "fake_tgt")],
                         expected=str(did_you_mean))
    assert_resolve_error([AddressLiteralSpec("real/f.txt", "fake_tgt")],
                         expected=str(did_you_mean))

    # SiblingAddresses requires the BUILD file to exist and at least one match.
    assert_resolve_error(
        [SiblingAddresses("fake")],
        expected=
        ("'fake' does not contain any BUILD files, but 'fake:' expected matching targets "
         "there."),
    )
    assert_resolve_error(
        [SiblingAddresses("empty")],
        expected="Address spec 'empty:' does not match any targets",
    )

    # MaybeEmptySiblingAddresses does not require a BUILD file to exist nor any matches.
    assert not resolve_address_specs(address_specs_rule_runner,
                                     [MaybeEmptySiblingAddresses("fake")])
    assert not resolve_address_specs(address_specs_rule_runner,
                                     [MaybeEmptySiblingAddresses("empty")])

    # DescendantAddresses requires at least one match, even if BUILD files exist.
    assert_resolve_error(
        [DescendantAddresses("fake"),
         DescendantAddresses("empty")],
        expected="Address spec 'fake::' does not match any targets",
    )

    # AscendantAddresses does not require any matches or BUILD files.
    assert not resolve_address_specs(
        address_specs_rule_runner,
        [AscendantAddresses("fake"),
         AscendantAddresses("empty")])
コード例 #2
0
ファイル: build_files_test.py プロジェクト: codealchemy/pants
def test_address_specs_do_not_exist(
        address_specs_rule_runner: RuleRunner) -> None:
    address_specs_rule_runner.write_files({
        "real/f.txt": "",
        "real/BUILD": "mock_tgt(sources=['f.txt'])",
        "empty/BUILD": "# empty"
    })

    def assert_resolve_error(specs: Iterable[AddressSpec], *,
                             expected: str) -> None:
        with engine_error(contains=expected):
            resolve_address_specs(address_specs_rule_runner, specs)

    # Literal addresses require for the relevant BUILD file to exist and for the target to be
    # resolved.
    assert_resolve_error([AddressLiteralSpec("fake", "tgt")],
                         expected="'fake' does not exist on disk")
    assert_resolve_error(
        [AddressLiteralSpec("fake/f.txt", "tgt")],
        expected="'fake/f.txt' does not exist on disk",
    )
    did_you_mean = ResolveError.did_you_mean(bad_name="fake_tgt",
                                             known_names=["real"],
                                             namespace="real")
    assert_resolve_error([AddressLiteralSpec("real", "fake_tgt")],
                         expected=str(did_you_mean))
    assert_resolve_error([AddressLiteralSpec("real/f.txt", "fake_tgt")],
                         expected=str(did_you_mean))

    # SiblingAddresses requires at least one match.
    assert_resolve_error(
        [SiblingAddresses("fake")],
        expected="No targets found for the address glob `fake:`",
    )
    assert_resolve_error(
        [SiblingAddresses("empty")],
        expected="No targets found for the address glob `empty:`")

    # MaybeEmptySiblingAddresses does not require any matches.
    assert not resolve_address_specs(address_specs_rule_runner,
                                     [MaybeEmptySiblingAddresses("fake")])
    assert not resolve_address_specs(address_specs_rule_runner,
                                     [MaybeEmptySiblingAddresses("empty")])

    # DescendantAddresses requires at least one match.
    assert_resolve_error(
        [DescendantAddresses("fake"),
         DescendantAddresses("empty")],
        expected=
        "No targets found for these address globs: ['empty::', 'fake::']",
    )

    # AscendantAddresses does not require any matches.
    assert not resolve_address_specs(
        address_specs_rule_runner,
        [AscendantAddresses("fake"),
         AscendantAddresses("empty")])
コード例 #3
0
async def find_build_file(address: Address) -> BuildFileAddress:
    address_family = await Get(AddressFamily,
                               AddressFamilyDir(address.spec_path))
    owning_address = address.maybe_convert_to_target_generator()
    if address_family.get_target_adaptor(owning_address) is None:
        raise ResolveError.did_you_mean(
            bad_name=owning_address.target_name,
            known_names=address_family.target_names,
            namespace=address_family.namespace,
        )
    bfa = next(build_file_address
               for build_file_address in address_family.build_file_addresses
               if build_file_address.address == owning_address)
    return BuildFileAddress(
        address, bfa.rel_path) if address.is_generated_target else bfa
コード例 #4
0
async def find_target_adaptor(address: Address) -> TargetAdaptor:
    """Hydrate a TargetAdaptor so that it may be converted into the Target API."""
    if not address.is_base_target:
        raise ValueError(
            f"Subtargets are not resident in BUILD files, and so do not have TargetAdaptors: {address}"
        )
    address_family = await Get(AddressFamily, Dir(address.spec_path))
    target_adaptor = address_family.get_target_adaptor(address)
    if target_adaptor is None:
        raise ResolveError.did_you_mean(
            bad_name=address.target_name,
            known_names=address_family.target_names,
            namespace=address_family.namespace,
        )
    return target_adaptor
コード例 #5
0
async def find_target_adaptor(address: Address) -> TargetAdaptor:
    """Hydrate a TargetAdaptor so that it may be converted into the Target API."""
    if address.is_generated_target:
        raise AssertionError(
            "Generated targets are not defined in BUILD files, and so do not have "
            f"TargetAdaptors: {address}")
    address_family = await Get(AddressFamily,
                               AddressFamilyDir(address.spec_path))
    target_adaptor = address_family.get_target_adaptor(address)
    if target_adaptor is None:
        raise ResolveError.did_you_mean(
            bad_name=address.target_name,
            known_names=address_family.target_names,
            namespace=address_family.namespace,
        )
    return target_adaptor
コード例 #6
0
    def test_address_specs_do_not_exist(self) -> None:
        self.create_file("real/f.txt")
        self.add_to_build_file("real", "mock_tgt(sources=['f.txt'])")
        self.add_to_build_file("empty", "# empty")

        def assert_resolve_error(specs: Iterable[AddressSpec], *,
                                 expected: str) -> None:
            with pytest.raises(ExecutionError) as exc:
                self.resolve_address_specs(specs)
            assert expected in str(exc.value)

        # Literal addresses require both a BUILD file to exist and for a target to be resolved.
        assert_resolve_error([AddressLiteralSpec("fake", "tgt")],
                             expected="'fake' does not exist on disk")
        assert_resolve_error(
            [AddressLiteralSpec("fake/f.txt", "tgt")],
            expected="'fake/f.txt' does not exist on disk",
        )
        did_you_mean = ResolveError.did_you_mean(bad_name="fake_tgt",
                                                 known_names=["real"],
                                                 namespace="real")
        assert_resolve_error([AddressLiteralSpec("real", "fake_tgt")],
                             expected=str(did_you_mean))
        assert_resolve_error([AddressLiteralSpec("real/f.txt", "fake_tgt")],
                             expected=str(did_you_mean))

        # SiblingAddresses require the BUILD file to exist, but are okay if no targets are resolved.
        assert_resolve_error(
            [SiblingAddresses("fake")],
            expected=
            ("'fake' does not contain any BUILD files, but 'fake:' expected matching targets "
             "there."),
        )
        assert not self.resolve_address_specs([SiblingAddresses("empty")])

        # DescendantAddresses requires at least one match, even if BUILD files exist.
        assert_resolve_error(
            [DescendantAddresses("fake"),
             DescendantAddresses("empty")],
            expected="Address spec 'fake::' does not match any targets",
        )

        # AscendantAddresses does not require any matches or BUILD files.
        assert not self.resolve_address_specs(
            [AscendantAddresses("fake"),
             AscendantAddresses("empty")])