def test_output_multiple_targets_one_source_overlapping(self): # target1 target2 # source="some/file.py" source="some/file.py" # / / # dep dep dep_address = FileDepsTest.make_build_target_address("dep/target") dep_target = self.mock_hydrated_target(dep_address, { "dep/file.py": "", }, ()) target_address1 = FileDepsTest.make_build_target_address("some/target") hydrated_target1 = self.mock_hydrated_target(target_address1, { "some/file.py": "", }, (dep_target, )) target_address2 = FileDepsTest.make_build_target_address("some/target") hydrated_target2 = self.mock_hydrated_target(target_address2, { "some/file.py": "", }, (dep_target, )) transitive_targets = TransitiveHydratedTargets( (hydrated_target1, hydrated_target2), OrderedSet([hydrated_target1, hydrated_target2, dep_target])) self.filedeps_rule_test( transitive_targets, dedent('''\ some/target/BUILD some/file.py dep/target/BUILD dep/file.py '''))
def test_output_no_target(self): transitive_targets = TransitiveHydratedTargets((), set()) self.filedeps_rule_test( transitive_targets, "" )
def test_output_one_target_one_source_with_dep(self): dep_address = FileDepsTest.make_build_target_address("dep/target") dep_target = self.mock_hydrated_target(dep_address, {"dep/file.py": "", }, ()) target_address = FileDepsTest.make_build_target_address("some/target") hydrated_target = self.mock_hydrated_target( target_address, {"some/file.py": "", }, (dep_target,) ) transitive_targets = TransitiveHydratedTargets( (hydrated_target,), OrderedSet([hydrated_target, dep_target]) ) self.filedeps_rule_test( transitive_targets, dedent( '''\ some/target/BUILD some/file.py dep/target/BUILD dep/file.py ''') )
def test_output_one_target_no_source(self): target_address = FileDepsTest.make_build_target_address("some/target") hydrated_target = self.mock_hydrated_target(target_address, {}, ()) transitive_targets = TransitiveHydratedTargets((hydrated_target, ), {hydrated_target}) self.filedeps_rule_test(transitive_targets, "some/target/BUILD\n")
def test_empty_target_succeeds(self) -> None: # NB: Because this particular edge case should early return, we can avoid providing valid # mocked yield gets for most of the rule's body. Future tests added to this file will need to # provide valid mocks instead. unimplemented_mock = lambda _: NotImplemented target = PythonTestsAdaptor( address=BuildFileAddress(target_name="target", rel_path="test")) result: TestResult = run_rule( run_python_test, rule_args=[ target, PyTest.global_instance(), PythonSetup.global_instance(), SubprocessEnvironment.global_instance(), ], mock_gets=[ MockGet(product_type=TransitiveHydratedTargets, subject_type=BuildFileAddresses, mock=lambda _: TransitiveHydratedTargets(roots=(), closure=())), MockGet( product_type=SourceRootStrippedSources, subject_type=Address, mock=lambda _: SourceRootStrippedSources(snapshot= EMPTY_SNAPSHOT), ), MockGet( product_type=SourceRootStrippedSources, subject_type=HydratedTarget, mock=unimplemented_mock, ), MockGet( product_type=Digest, subject_type=DirectoriesToMerge, mock=unimplemented_mock, ), MockGet( product_type=InjectedInitDigest, subject_type=Digest, mock=unimplemented_mock, ), MockGet( product_type=Pex, subject_type=CreatePex, mock=unimplemented_mock, ), MockGet( product_type=FallibleExecuteProcessResult, subject_type=ExecuteProcessRequest, mock=unimplemented_mock, ), ], ) self.assertEqual(result.status, Status.SUCCESS)
def test_output_one_target_one_source(self): target_address = FileDepsTest.make_build_target_address("some/target") hydrated_target = self.mock_hydrated_target(target_address, { "some/file.py": "", }, ()) transitive_targets = TransitiveHydratedTargets((hydrated_target, ), {hydrated_target}) self.filedeps_rule_test( transitive_targets, dedent('''\ some/target/BUILD some/file.py '''))
def test_outputs_multiple_targets_one_source_with_dep(self): # target1 target2 # source="some/file.py" source="other/file.py" # / / # dep1 dep2 dep_address1 = FileDepsTest.make_build_target_address("dep1/target") dep_target1 = self.mock_hydrated_target(dep_address1, { "dep1/file.py": "", }, ()) target_address1 = FileDepsTest.make_build_target_address("some/target") hydrated_target1 = self.mock_hydrated_target(target_address1, { "some/file.py": "", }, (dep_target1, )) dep_address2 = FileDepsTest.make_build_target_address("dep2/target") dep_target2 = self.mock_hydrated_target(dep_address2, { "dep2/file.py": "", }, ()) target_address2 = FileDepsTest.make_build_target_address( "other/target") hydrated_target2 = self.mock_hydrated_target(target_address2, { "other/file.py": "", }, (dep_target2, )) transitive_targets = TransitiveHydratedTargets( (hydrated_target1, hydrated_target2), OrderedSet( [hydrated_target1, hydrated_target2, dep_target1, dep_target2])) self.filedeps_rule_test( transitive_targets, dedent('''\ some/target/BUILD some/file.py other/target/BUILD other/file.py dep1/target/BUILD dep1/file.py dep2/target/BUILD dep2/file.py '''))
def test_output_multiple_targets_one_source(self): target_address1 = FileDepsTest.make_build_target_address("some/target") hydrated_target1 = self.mock_hydrated_target(target_address1, {"some/file.py": "", }, ()) target_address2 = FileDepsTest.make_build_target_address("other/target") hydrated_target2 = self.mock_hydrated_target(target_address2, {"other/file.py": "", }, ()) transitive_targets = TransitiveHydratedTargets( (hydrated_target1, hydrated_target2), OrderedSet([hydrated_target1, hydrated_target2]) ) self.filedeps_rule_test( transitive_targets, dedent( '''\ some/target/BUILD some/file.py other/target/BUILD other/file.py ''') )