// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.util; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyReferenceExpression; import com.twitter.intellij.pants.testFramework.PantsCodeInsightFixtureTestCase; import com.twitter.intellij.pants.model.PantsSourceType; import java.util.Arrays; import java.util.Map; import java.util.Set; public class PantsPsiUtilTest extends PantsCodeInsightFixtureTestCase { @Override protected String getBasePath() { return "/util"; } public void doFindTargetsTest(String... actualTargets) { final VirtualFile buildFile = myFixture.copyFileToProject(getTestName(true) + ".py", "BUILD"); myFixture.configureFromExistingVirtualFile(buildFile); final Set<String> targetNames = PantsPsiUtil.findTargets(myFixture.getFile()).keySet(); assertContainsElements( targetNames, Arrays.asList(actualTargets) ); } public void testSourceTypeForTargetType() { assertEquals( "Source type correctly set", PantsSourceType.SOURCE, PantsUtil.getSourceTypeForTargetType("source") ); assertEquals( "Resource type correctly set", PantsSourceType.RESOURCE, PantsUtil.getSourceTypeForTargetType("resource") ); assertEquals( "Test Source type correctly set", PantsSourceType.TEST, PantsUtil.getSourceTypeForTargetType("TEST") ); assertEquals( "Test Resource type correctly set", PantsSourceType.TEST_RESOURCE, PantsUtil.getSourceTypeForTargetType("TEST_RESOURCE") ); assertEquals( "Source type correctly set for gibberish", PantsSourceType.SOURCE, PantsUtil.getSourceTypeForTargetType("gibberish") ); } public void testFindTargets() { doFindTargetsTest("main", "main-bin"); } public void testWeirdBuildFile() { doFindTargetsTest(); } public void testTrickyBuildFile() { doFindTargetsTest("main", "main-bin"); } public void testAliases() { final PsiFile psiFile = myFixture.configureByFile("aliases.py"); assertTrue(psiFile instanceof PyFile); final Map<String, PyReferenceExpression> definitions = PantsPsiUtil.findTargetDefinitions((PyFile)psiFile); assertContainsElements( definitions.keySet(), Arrays.asList("annotation_processor", "jar_library", "scala_library", "scalac_plugin", "rglobs") ); } }