blob: bd3e3528eaad01a4cd38e2b9cb8f43e924939aef [file] [log] [blame]
/*
* Copyright 2014-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.cxx;
import static org.junit.Assert.assertEquals;
import com.facebook.buck.rules.BuildRuleResolver;
import com.facebook.buck.rules.FakeBuildRule;
import com.facebook.buck.rules.FakeRuleKeyBuilderFactory;
import com.facebook.buck.rules.RuleKey;
import com.facebook.buck.rules.RuleKeyBuilderFactory;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.testutil.FakeFileHashCache;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ToolTest {
private RuleKey.Builder createRuleKeyBuilder(
RuleKeyBuilderFactory factory,
SourcePathResolver resolver) {
return factory.newInstance(new FakeBuildRule("//:test", resolver), resolver);
}
@Test
public void sourcePathVersion() {
SourcePathResolver pathResolver = new SourcePathResolver(new BuildRuleResolver());
RuleKeyBuilderFactory ruleKeyBuilderFactory =
new FakeRuleKeyBuilderFactory(
FakeFileHashCache.createFromStrings(
ImmutableMap.<String, String>builder()
.put("path", Strings.repeat("a", 40))
.build()));
Path path = Paths.get("path");
RuleKey.Builder.RuleKeyPair pathRuleKey =
createRuleKeyBuilder(ruleKeyBuilderFactory, pathResolver)
.setReflectively("tool", path)
.build();
Tool tool1 = new HashedFileTool(path);
RuleKey.Builder.RuleKeyPair tool1RuleKey =
createRuleKeyBuilder(ruleKeyBuilderFactory, pathResolver)
.setReflectively("tool", tool1)
.build();
assertEquals(pathRuleKey, tool1RuleKey);
Tool tool2 = new HashedFileTool(path);
RuleKey.Builder.RuleKeyPair tool2RuleKey =
createRuleKeyBuilder(ruleKeyBuilderFactory, pathResolver)
.setReflectively("tool", tool2)
.build();
assertEquals(pathRuleKey, tool2RuleKey);
}
@Test
public void customVersion() {
SourcePathResolver pathResolver = new SourcePathResolver(new BuildRuleResolver());
RuleKeyBuilderFactory ruleKeyBuilderFactory =
new FakeRuleKeyBuilderFactory(
FakeFileHashCache.createFromStrings(
ImmutableMap.<String, String>of()));
String tool = "tool";
String version = "version";
RuleKey.Builder.RuleKeyPair versionRuleKey =
createRuleKeyBuilder(ruleKeyBuilderFactory, pathResolver)
.setReflectively("tool", String.format("%s (%s)", tool, version))
.build();
Tool tool1 =
new VersionedTool(
Paths.get("something"),
ImmutableList.<String>of(),
tool,
version);
RuleKey.Builder.RuleKeyPair tool1RuleKey =
createRuleKeyBuilder(ruleKeyBuilderFactory, pathResolver)
.setReflectively("tool", tool1)
.build();
assertEquals(versionRuleKey, tool1RuleKey);
Tool tool2 =
new VersionedTool(
Paths.get("something-else"),
ImmutableList.<String>of(),
tool,
version);
RuleKey.Builder.RuleKeyPair tool2RuleKey =
createRuleKeyBuilder(ruleKeyBuilderFactory, pathResolver)
.setReflectively("tool", tool2)
.build();
assertEquals(versionRuleKey, tool2RuleKey);
}
}