@Test public void testGetBuildTargetForAlias() throws IOException, NoSuchBuildTargetException { BuildTargetParser parser = EasyMock.createMock(BuildTargetParser.class); EasyMock.expect(parser.parse("//java/com/example:foo", ParseContext.fullyQualified())) .andReturn(BuildTargetFactory.newInstance("//java/com/example:foo")); EasyMock.expect(parser.parse("//java/com/example:bar", ParseContext.fullyQualified())) .andReturn(BuildTargetFactory.newInstance("//java/com/example:bar")); EasyMock.replay(parser); Reader reader = new StringReader( Joiner.on('\n') .join("[alias]", "foo = //java/com/example:foo", "bar = //java/com/example:bar")); BuckConfig config = createWithDefaultFilesystem(reader, parser); assertEquals("//java/com/example:foo", config.getBuildTargetForAlias("foo")); assertEquals("//java/com/example:bar", config.getBuildTargetForAlias("bar")); assertNull( "Invalid alias names, such as build targets, should be tolerated by this method.", config.getBuildTargetForAlias("//java/com/example:foo")); assertNull(config.getBuildTargetForAlias("baz")); Reader noAliasesReader = new StringReader(""); BuckConfig noAliasesConfig = createWithDefaultFilesystem(noAliasesReader, parser); assertNull(noAliasesConfig.getBuildTargetForAlias("foo")); assertNull(noAliasesConfig.getBuildTargetForAlias("bar")); assertNull(noAliasesConfig.getBuildTargetForAlias("baz")); EasyMock.verify(parser); }
@Test public void testReferentialAliases() throws IOException, NoSuchBuildTargetException { BuildTargetParser parser = EasyMock.createMock(BuildTargetParser.class); EasyMock.expect(parser.parse("//java/com/example:foo", ParseContext.fullyQualified())) .andReturn(BuildTargetFactory.newInstance("//java/com/example:foo")); EasyMock.expect(parser.parse("//java/com/example:bar", ParseContext.fullyQualified())) .andReturn(BuildTargetFactory.newInstance("//java/com/example:bar")); EasyMock.replay(parser); Reader reader = new StringReader( Joiner.on('\n') .join( "[alias]", "foo = //java/com/example:foo", "bar = //java/com/example:bar", "foo_codename = foo", "", "# Do not delete these: automation builds require these aliases to exist!", "automation_foo = foo_codename", "automation_bar = bar")); BuckConfig config = createWithDefaultFilesystem(reader, parser); assertEquals("//java/com/example:foo", config.getBuildTargetForAlias("foo")); assertEquals("//java/com/example:bar", config.getBuildTargetForAlias("bar")); assertEquals("//java/com/example:foo", config.getBuildTargetForAlias("foo_codename")); assertEquals("//java/com/example:foo", config.getBuildTargetForAlias("automation_foo")); assertEquals("//java/com/example:bar", config.getBuildTargetForAlias("automation_bar")); assertNull(config.getBuildTargetForAlias("baz")); EasyMock.verify(parser); }
/** * Ensure that whichever alias is listed first in the file is the one used in the reverse map if * the value appears multiple times. */ @Test public void testGetBasePathToAliasMap() throws IOException, NoSuchBuildTargetException { BuildTargetParser parser = EasyMock.createMock(BuildTargetParser.class); EasyMock.expect(parser.parse("//java/com/example:fbandroid", ParseContext.fullyQualified())) .andReturn(BuildTargetFactory.newInstance("//java/com/example:fbandroid")) .anyTimes(); EasyMock.replay(parser); Reader reader1 = new StringReader( Joiner.on('\n') .join( "[alias]", "fb4a = //java/com/example:fbandroid", "katana = //java/com/example:fbandroid")); BuckConfig config1 = createWithDefaultFilesystem(reader1, parser); assertEquals(ImmutableMap.of("java/com/example", "fb4a"), config1.getBasePathToAliasMap()); assertEquals( ImmutableMap.of( "fb4a", "//java/com/example:fbandroid", "katana", "//java/com/example:fbandroid"), config1.getEntriesForSection("alias")); Reader reader2 = new StringReader( Joiner.on('\n') .join( "[alias]", "katana = //java/com/example:fbandroid", "fb4a = //java/com/example:fbandroid")); BuckConfig config2 = createWithDefaultFilesystem(reader2, parser); assertEquals(ImmutableMap.of("java/com/example", "katana"), config2.getBasePathToAliasMap()); assertEquals( ImmutableMap.of( "fb4a", "//java/com/example:fbandroid", "katana", "//java/com/example:fbandroid"), config2.getEntriesForSection("alias")); Reader noAliasesReader = new StringReader(""); BuckConfig noAliasesConfig = createWithDefaultFilesystem(noAliasesReader, parser); assertEquals(ImmutableMap.of(), noAliasesConfig.getBasePathToAliasMap()); assertEquals(ImmutableMap.of(), noAliasesConfig.getEntriesForSection("alias")); EasyMock.verify(parser); }
@Override protected void amendBuilder( AbstractBuildRuleBuilder abstractBuilder, BuildRuleFactoryParams params) throws NoSuchBuildTargetException { AndroidInstrumentationApk.Builder builder = (AndroidInstrumentationApk.Builder) abstractBuilder; BuildTarget target = params.target; // manifest String manifestAttribute = params.getRequiredStringAttribute("manifest"); String manifestPath = params.resolveFilePathRelativeToBuildFileDirectory(manifestAttribute); builder.setManifest(manifestPath); // apk String apk = params.getRequiredStringAttribute("apk"); ParseContext buildFileParseContext = ParseContext.forBaseName(target.getBaseName()); BuildTarget buildTarget = params.buildTargetParser.parse(apk, buildFileParseContext); builder.setApk(buildTarget.getFullyQualifiedName()); }
@Test public void testUnresolvedAliasThrows() throws IOException, NoSuchBuildTargetException { BuildTargetParser parser = EasyMock.createMock(BuildTargetParser.class); EasyMock.expect(parser.parse("//java/com/example:foo", ParseContext.fullyQualified())) .andReturn(BuildTargetFactory.newInstance("//java/com/example:foo")); EasyMock.replay(parser); Reader reader = new StringReader( Joiner.on('\n').join("[alias]", "foo = //java/com/example:foo", "bar = food")); try { createWithDefaultFilesystem(reader, parser); fail("Should have thrown HumanReadableException."); } catch (HumanReadableException e) { assertEquals("No alias for: food.", e.getHumanReadableErrorMessage()); } EasyMock.verify(parser); }