Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
[ci skip-rust]

[ci skip-build-wheels]
  • Loading branch information
Tom Dyas committed Nov 30, 2021
1 parent 7ea90ff commit 7bf8896
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class FirstPartyScalaTargetsMappingRequest(FirstPartyMappingRequest):


@rule(desc="Find all Scala targets in project", level=LogLevel.DEBUG)
def find_all_java_targets(targets: AllTargets) -> AllScalaTargets:
def find_all_scala_targets(targets: AllTargets) -> AllScalaTargets:
return AllScalaTargets(tgt for tgt in targets if tgt.has_field(ScalaSourceField))


Expand Down
103 changes: 103 additions & 0 deletions src/python/pants/jvm/dependency_inference/java_scala_interop_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
# Licensed under the Apache License, Version 2.0 (see LICENSE).
import textwrap

import pytest

from pants.backend.java.compile.javac import rules as javac_rules
from pants.backend.java.dependency_inference import symbol_mapper as java_symbol_mapper
from pants.backend.java.dependency_inference.rules import rules as java_dep_inference_rules
from pants.backend.java.target_types import JavaSourcesGeneratorTarget, JavaSourceTarget
from pants.backend.java.target_types import rules as java_target_rules
from pants.backend.scala import target_types as scala_target_types
from pants.backend.scala.dependency_inference import rules as scala_dep_inference_rules
from pants.backend.scala.dependency_inference import scala_parser
from pants.backend.scala.dependency_inference import symbol_mapper as scala_symbol_mapper
from pants.backend.scala.target_types import ScalaSourcesGeneratorTarget, ScalaSourceTarget
from pants.core.util_rules import config_files, source_files
from pants.core.util_rules.external_tool import rules as external_tool_rules
from pants.engine.addresses import Address, Addresses
from pants.engine.rules import QueryRule
from pants.engine.target import Dependencies, DependenciesRequest
from pants.jvm.jdk_rules import rules as java_util_rules
from pants.jvm.resolve.coursier_fetch import rules as coursier_fetch_rules
from pants.jvm.resolve.coursier_setup import rules as coursier_setup_rules
from pants.jvm.util_rules import rules as util_rules
from pants.testutil.rule_runner import PYTHON_BOOTSTRAP_ENV, RuleRunner

NAMED_RESOLVE_OPTIONS = '--jvm-resolves={"test": "coursier_resolve.lockfile"}'
DEFAULT_RESOLVE_OPTION = "--jvm-default-resolve=test"


@pytest.fixture
def rule_runner() -> RuleRunner:
rule_runner = RuleRunner(
rules=[
*config_files.rules(),
*coursier_fetch_rules(),
*coursier_setup_rules(),
*java_dep_inference_rules(),
*external_tool_rules(),
*java_target_rules(),
*java_util_rules(),
*javac_rules(),
*java_symbol_mapper.rules(),
*source_files.rules(),
*scala_parser.rules(),
*scala_symbol_mapper.rules(),
*scala_dep_inference_rules.rules(),
*scala_target_types.rules(),
*util_rules(),
QueryRule(Addresses, (DependenciesRequest,)),
],
target_types=[
JavaSourcesGeneratorTarget,
JavaSourceTarget,
ScalaSourcesGeneratorTarget,
ScalaSourceTarget,
],
)
rule_runner.set_options(
args=[NAMED_RESOLVE_OPTIONS, DEFAULT_RESOLVE_OPTION], env_inherit=PYTHON_BOOTSTRAP_ENV
)
return rule_runner


def test_java_infers_scala_dependency(rule_runner: RuleRunner) -> None:
rule_runner.write_files(
{
"org/pantsbuild/lib/BUILD": "scala_sources()\n",
"org/pantsbuild/lib/Foo.scala": textwrap.dedent(
"""
package org.pantsbuild.lib
object Foo {
def grok(): Unit = {
println("Hello world!")
}
}
"""
),
"org/pantsbuild/example/BUILD": "java_sources()\n",
"org/pantsbuild/example/Bar.java": textwrap.dedent(
"""
package org.pantsbuild.example;
import org.pantsbuild.lib.Foo$;
public class Bar {
public static void main(String[] args) {
Foo$.MODULE$.grok();
}
}
"""
),
}
)
example_tgt = rule_runner.get_target(
Address("org/pantsbuild/example", target_name="example", relative_file_path="Bar.java")
)
deps = rule_runner.request(Addresses, [DependenciesRequest(example_tgt[Dependencies])])
assert deps == Addresses(
[Address("org/pantsbuild/lib", target_name="lib", relative_file_path="Foo.scala")]
)

0 comments on commit 7bf8896

Please sign in to comment.