// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.service.project; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.twitter.intellij.pants.PantsException; public class PantsResolverTest extends PantsResolverTestBase { public void testOneCommonRootOwnedBySingleTargetOneNot() { addInfo("a:java"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("b:scala"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("c:tests"). withRoot("src/com/foo/baz", "com.foo.baz"); assertDependency("a_java", "src_com_foo_bar_common_sources"); assertDependency("a_java", "src_com_foo_baz_common_sources"); assertDependency("b_scala", "src_com_foo_bar_common_sources"); assertDependency("b_scala", "src_com_foo_baz_common_sources"); assertDependency("c_tests", "src_com_foo_baz_common_sources"); } public void testTargetsWithMultipleCommonRootsEachUseSyntheticTargets() { addInfo("a:java"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("b:scala"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("c:tests"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/qwerty", "com.foo.qwerty"); assertDependency("a_java", "src_com_foo_bar_common_sources"); assertDependency("a_java", "src_com_foo_baz_common_sources"); assertDependency("b_scala", "src_com_foo_bar_common_sources"); assertDependency("b_scala", "src_com_foo_baz_common_sources"); assertDependency("c_tests", "src_com_foo_bar_common_sources"); } public void testTargetsWithMultipleCommonRootsEachUseSyntheticTargets2() { addInfo("a:java"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("b:scala"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("c:tests"). withRoot("src/com/foo/baz", "com.foo.baz"). withRoot("src/com/foo/qwerty", "com.foo.qwerty"); assertDependency("a_java", "src_com_foo_bar_common_sources"); assertDependency("a_java", "src_com_foo_baz_common_sources"); assertDependency("b_scala", "src_com_foo_bar_common_sources"); assertDependency("b_scala", "src_com_foo_baz_common_sources"); assertDependency("c_tests", "src_com_foo_baz_common_sources"); } public void testTwoTargetsWithTwoCommonRootsHaveNoContentRootsAndDependOnSyntheticTargets() { addInfo("a:java"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); addInfo("b:scala"). withRoot("src/com/foo/bar", "com.foo.bar"). withRoot("src/com/foo/baz", "com.foo.baz"); assertDependency("a_java", "src_com_foo_bar_common_sources"); assertDependency("b_scala", "src_com_foo_bar_common_sources"); assertSourceRoot("src_com_foo_bar_common_sources", "src/com/foo/bar"); assertSourceRoot("src_com_foo_baz_common_sources", "src/com/foo/baz"); assertNoContentRoot("a_java"); assertNoContentRoot("b_scala"); } public void testTargetsWithSingleCommonRootsDependOnSyntheticTarget() { addInfo("a:scala"). withRoot("src/com/foo/bar", "com.foo.bar"); addInfo("b:scala"). withRoot("src/com/foo/bar", "com.foo.bar"); assertNoContentRoot("a_scala"); assertNoContentRoot("b_scala"); assertDependency("a_scala", "src_com_foo_bar_common_sources"); assertDependency("b_scala", "src_com_foo_bar_common_sources"); assertSourceRoot("src_com_foo_bar_common_sources", "src/com/foo/bar"); } public void testCommonAncestorRoots() { addInfo("a:scala"). withRoot("src/com/foo/a_bar", "com.foo.a_bar"). withRoot("src/com/foo/a_baz", "com.foo.a_baz"); addInfo("b:scala"). withRoot("src/com/foo/b_bar", "com.foo.b_bar"). withRoot("src/com/foo/b_baz", "com.foo.b_baz"); assertContentRoots( "a_scala", "/src/com/foo/a_bar", "/src/com/foo/a_baz" ); assertContentRoots( "b_scala", "/src/com/foo/b_bar", "/src/com/foo/b_baz" ); } public void testOnlyOneInstanceOfLibraryDataCreatedForSameLibrary() { addJarLibrary("3rdparty/com/twitter/mycoollibrary:1.2.3"); addInfo("a:scala").withLibrary("3rdparty/com/twitter/mycoollibrary:1.2.3"); addInfo("b:scala").withLibrary("3rdparty/com/twitter/mycoollibrary:1.2.3"); assertDependency("a_scala", "3rdparty_com_twitter_mycoollibrary_1.2.3"); assertDependency("b_scala", "3rdparty_com_twitter_mycoollibrary_1.2.3"); assertLibrary("3rdparty_com_twitter_mycoollibrary_1.2.3", "3rdparty/com/twitter/mycoollibrary:1.2.3"); } public void testJavaScalaCyclic() { addJarLibrary("3rdparty/com/twitter/baz:baz"); addInfo("a:java"). withRoot("src/java/foo/bar", "com.foo.bar"). withRoot("src/java/foo/baz", "com.foo.baz"). withDependency("a:scala"). withDependency("3rdparty/com/twitter/baz:baz"); addJarLibrary("3rdparty/com/twitter/bar:bar"); addInfo("a:scala"). withRoot("src/scala/foo/bar", "com.foo.bar"). withRoot("src/scala/foo/baz", "com.foo.baz"). withDependency("a:java"). withDependency("3rdparty/com/twitter/bar:bar"); assertModulesCreated("a_java_and_scala", "3rdparty_com_twitter_bar_bar", "3rdparty_com_twitter_baz_baz"); assertDependency("a_java_and_scala", "3rdparty_com_twitter_baz_baz"); assertDependency("a_java_and_scala", "3rdparty_com_twitter_bar_bar"); assertLibrary("3rdparty_com_twitter_baz_baz", "3rdparty/com/twitter/baz:baz"); assertLibrary("3rdparty_com_twitter_bar_bar", "3rdparty/com/twitter/bar:bar"); assertSourceRoot("a_java_and_scala", "src/java/foo/bar"); assertSourceRoot("a_java_and_scala", "src/java/foo/baz"); assertSourceRoot("a_java_and_scala", "src/scala/foo/bar"); assertSourceRoot("a_java_and_scala", "src/scala/foo/baz"); } public void testSelfCyclicDependencyException() { addInfo("a:java"). withRoot("src/java/foo/bar", "com.foo.bar"). withDependency("a:java"); try { getProjectNode(); fail(String.format("Should throw %s due to self cyclic dependency, but did not.", PantsException.class)); } catch (PantsException ignored) { // Some editors were opened, so make sure to close them after the exception. Editor[] editors = EditorFactory.getInstance().getAllEditors(); for (Editor e : editors) { EditorFactory.getInstance().releaseEditor(e); } } } }