def test_coursier_resolve_noop_does_not_touch_lockfile( rule_runner: RuleRunner) -> None: expected_lockfile = CoursierResolvedLockfile(entries=(CoursierLockfileEntry( coord=MavenCoord(coord="org.hamcrest:hamcrest-core:1.3"), file_name="hamcrest-core-1.3.jar", direct_dependencies=MavenCoordinates([]), dependencies=MavenCoordinates([]), file_digest=FileDigest( fingerprint= "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", serialized_bytes_length=45024, ), ), )) rule_runner.write_files({ "BUILD": dedent("""\ coursier_lockfile( name = 'example-lockfile', maven_requirements = [ 'org.hamcrest:hamcrest-core:1.3', ], sources = [ "coursier_resolve.lockfile", ], ) """), "coursier_resolve.lockfile": expected_lockfile.to_json().decode("utf-8"), }) result = rule_runner.run_goal_rule(CoursierResolve, args=["::"]) assert result.exit_code == 0 assert result.stderr == ""
def test_coursier_resolve_updates_bogus_lockfile( rule_runner: RuleRunner) -> None: rule_runner.write_files({ "BUILD": dedent("""\ coursier_lockfile( name = 'example-lockfile', maven_requirements = [ 'org.hamcrest:hamcrest-core:1.3', ], ) """), "coursier_resolve.lockfile": "]bad json[", }) result = rule_runner.run_goal_rule(CoursierResolve, args=["::"]) assert result.exit_code == 0 assert result.stderr == "Updated lockfile at: coursier_resolve.lockfile\n" expected_lockfile = CoursierResolvedLockfile(entries=(CoursierLockfileEntry( coord=MavenCoord(coord="org.hamcrest:hamcrest-core:1.3"), file_name="hamcrest-core-1.3.jar", direct_dependencies=MavenCoordinates([]), dependencies=MavenCoordinates([]), file_digest=FileDigest( fingerprint= "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", serialized_bytes_length=45024, ), ), )) assert (Path(rule_runner.build_root, "coursier_resolve.lockfile").read_bytes() == expected_lockfile.to_json())
def test_compile_with_maven_deps(rule_runner: RuleRunner) -> None: resolved_joda_lockfile = CoursierResolvedLockfile( entries=(CoursierLockfileEntry( coord=Coordinate( group="joda-time", artifact="joda-time", version="2.10.10"), file_name="joda-time-2.10.10.jar", direct_dependencies=Coordinates([]), dependencies=Coordinates([]), file_digest=FileDigest( fingerprint= "dd8e7c92185a678d1b7b933f31209b6203c8ffa91e9880475a1be0346b9617e3", serialized_bytes_length=644419, ), ), )) rule_runner.write_files({ "BUILD": dedent("""\ jvm_artifact( name = "joda-time_joda-time", group = "joda-time", artifact = "joda-time", version = "2.10.10", ) java_sources( name = 'main', dependencies = [ ':joda-time_joda-time', ] ) """), "coursier_resolve.lockfile": resolved_joda_lockfile.to_json().decode("utf-8"), "Example.java": dedent(""" package org.pantsbuild.example; import org.joda.time.DateTime; public class Example { public static void main(String[] args) { DateTime dt = new DateTime(); System.out.println(dt.getYear()); } } """), }) request = CompileJavaSourceRequest( component=expect_single_expanded_coarsened_target( rule_runner, Address(spec_path="", target_name="main")), resolve=make_resolve(rule_runner), ) compiled_classfiles = rule_runner.request(ClasspathEntry, [request]) classpath = rule_runner.request(RenderedClasspath, [compiled_classfiles.digest]) assert classpath.content == { ".Example.java.main.jar": {"org/pantsbuild/example/Example.class"} }
def test_compile_with_maven_deps(rule_runner: RuleRunner) -> None: resolved_joda_lockfile = CoursierResolvedLockfile( entries=(CoursierLockfileEntry( coord=Coordinate( group="joda-time", artifact="joda-time", version="2.10.10"), file_name="joda-time-2.10.10.jar", direct_dependencies=Coordinates([]), dependencies=Coordinates([]), file_digest=FileDigest( fingerprint= "dd8e7c92185a678d1b7b933f31209b6203c8ffa91e9880475a1be0346b9617e3", serialized_bytes_length=644419, ), ), )) rule_runner.write_files({ "BUILD": dedent("""\ jvm_artifact( name = "joda-time_joda-time", group = "joda-time", artifact = "joda-time", version = "2.10.10", ) scala_sources( name = 'main', dependencies = [":joda-time_joda-time"], ) """), "coursier_resolve.lockfile": resolved_joda_lockfile.to_json().decode("utf-8"), "Example.scala": dedent(""" package org.pantsbuild.example import org.joda.time.DateTime object Main { def main(args: Array[String]): Unit = { val dt = new DateTime() println(dt.getYear) } } """), }) request = CompileScalaSourceRequest( component=expect_single_expanded_coarsened_target( rule_runner, Address(spec_path="", target_name="main")), resolve=make_resolve(rule_runner), ) compiled_classfiles = rule_runner.request(ClasspathEntry, [request]) classpath = rule_runner.request(RenderedClasspath, [compiled_classfiles.digest]) assert classpath.content == { ".Example.scala.main.jar": { "META-INF/MANIFEST.MF", "org/pantsbuild/example/Main$.class", "org/pantsbuild/example/Main.class", } }
def test_coursier_resolve_updates_bogus_lockfile( rule_runner: RuleRunner) -> None: rule_runner.write_files({ "BUILD": dedent("""\ java_sources( name = 'here_to_provide_dependencies', dependencies = [ ':org.hamcrest_hamcrest-core', ], sources = ["*.txt"], ) jvm_artifact( name = 'org.hamcrest_hamcrest-core', group = 'org.hamcrest', artifact = 'hamcrest-core', version = "1.3", ) coursier_lockfile( name = 'example-lockfile', ) """), "coursier_resolve.lockfile": "]bad json[", }) result = rule_runner.run_goal_rule(CoursierResolve, args=ARGS, env_inherit=PYTHON_BOOTSTRAP_ENV) assert result.exit_code == 0 assert result.stderr == "Updated lockfile at: coursier_resolve.lockfile\n" expected_lockfile = CoursierResolvedLockfile(entries=(CoursierLockfileEntry( coord=HAMCREST_COORD, file_name="hamcrest-core-1.3.jar", direct_dependencies=Coordinates([]), dependencies=Coordinates([]), file_digest=FileDigest( fingerprint= "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9", serialized_bytes_length=45024, ), ), )) assert (Path(rule_runner.build_root, "coursier_resolve.lockfile").read_bytes() == expected_lockfile.to_json())
def test_vintage_and_jupiter_simple_success(rule_runner: RuleRunner) -> None: combined_lockfile = CoursierResolvedLockfile( entries=(*JUNIT4_RESOLVED_LOCKFILE.entries, *JUNIT5_RESOLVED_LOCKFILE.entries)) rule_runner.write_files({ "coursier_resolve.lockfile": combined_lockfile.to_json().decode("utf-8"), "BUILD": dedent("""\ jvm_artifact( name='junit_junit', group='junit', artifact='junit', version='4.13.2', ) jvm_artifact( name='org.junit.jupiter_junit-jupiter-api', group='org.junit.jupiter', artifact='junit-jupiter-api', version='5.7.2', ) coursier_lockfile( name = 'lockfile', requirements = [ ':junit_junit', ':org.junit.jupiter_junit-jupiter-api', ], sources = [ "coursier_resolve.lockfile", ], ) junit_tests( name='example-test', dependencies= [':lockfile'], ) """), "JupiterTest.java": dedent(""" package org.pantsbuild.example; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; class JupiterTest { @Test void testHello(){ assertEquals("Hello!", "Hello!"); } } """), "VintageTest.java": dedent(""" package org.pantsbuild.example; import junit.framework.TestCase; public class VintageTest extends TestCase { public void testGoodbye(){ assertTrue("Hello!" == "Hello!"); } } """), }) test_result = run_junit_test(rule_runner, "example-test", "JupiterTest.java") assert test_result.exit_code == 0 # TODO: Once support for parsing junit.xml is implemented, use that to determine status so we can remove the # hack to use ASCII test output in the `run_junit_test` rule. assert re.search(r"Finished:\s+testHello", test_result.stdout) is not None assert re.search(r"Finished:\s+testGoodbye", test_result.stdout) is not None assert re.search(r"2 tests successful", test_result.stdout) is not None assert re.search(r"2 tests found", test_result.stdout) is not None