blob: 6118654096b21f81914d87419f4f2fcb000a1fd8 [file] [log] [blame]
// Copyright 2017 The Bazel Authors. All rights reserved.
//
// 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.google.devtools.build.lib.rules.objc;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.packages.util.MockProtoSupport;
import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs;
import com.google.devtools.build.lib.testutil.Scratch;
import java.io.IOException;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Test case for apple_dyamic_library. */
@RunWith(JUnit4.class)
public class AppleDynamicLibraryTest extends ObjcRuleTestCase {
static final RuleType RULE_TYPE = new RuleType("apple_binary") {
@Override
Iterable<String> requiredAttributes(Scratch scratch, String packageDir,
Set<String> alreadyAdded) throws IOException {
return Iterables.concat(ImmutableList.of("binary_type = 'dylib'"),
AppleBinaryTest.RULE_TYPE.requiredAttributes(scratch, packageDir,
Sets.union(alreadyAdded, ImmutableSet.of("binary_type"))));
}
};
@Before
public void setUp() throws Exception {
MockProtoSupport.setupWorkspace(scratch);
invalidatePackages();
}
@Test
public void testCcDependencyLinkoptsArePropagatedToLinkAction() throws Exception {
checkCcDependencyLinkoptsArePropagatedToLinkAction(RULE_TYPE);
}
@Test
public void testUnknownPlatformType() throws Exception {
checkError(
"package",
"test",
String.format(MultiArchSplitTransitionProvider.UNSUPPORTED_PLATFORM_TYPE_ERROR_FORMAT,
"meow_meow_os"),
"apple_binary(name = 'test', binary_type = 'dylib', platform_type = 'meow_meow_os')");
}
@Test
public void testProtoBundlingAndLinking() throws Exception {
checkProtoBundlingAndLinking(RULE_TYPE);
}
@Test
public void testProtoBundlingWithTargetsWithNoDeps() throws Exception {
checkProtoBundlingWithTargetsWithNoDeps(RULE_TYPE);
}
@Test
public void testCanUseCrosstool_singleArch() throws Exception {
checkLinkingRuleCanUseCrosstool_singleArch(RULE_TYPE);
}
@Test
public void testCanUseCrosstool_multiArch() throws Exception {
checkLinkingRuleCanUseCrosstool_multiArch(RULE_TYPE);
}
@Test
public void testAppleSdkIphoneosPlatformEnv() throws Exception {
checkAppleSdkIphoneosPlatformEnv(RULE_TYPE);
}
@Test
public void testXcodeVersionEnv() throws Exception {
checkXcodeVersionEnv(RULE_TYPE);
}
@Test
public void testAliasedLinkoptsThroughObjcLibrary() throws Exception {
checkAliasedLinkoptsThroughObjcLibrary(RULE_TYPE);
}
@Test
public void testObjcProviderLinkInputsInLinkAction() throws Exception {
checkObjcProviderLinkInputsInLinkAction(RULE_TYPE);
}
@Test
public void testAppleSdkVersionEnv() throws Exception {
checkAppleSdkVersionEnv(RULE_TYPE);
}
@Test
public void testNonDefaultAppleSdkVersionEnv() throws Exception {
checkNonDefaultAppleSdkVersionEnv(RULE_TYPE);
}
@Test
public void testAppleSdkDefaultPlatformEnv() throws Exception {
checkAppleSdkDefaultPlatformEnv(RULE_TYPE);
}
@Test
public void testAvoidDepsObjects_avoidViaCcLibrary() throws Exception {
checkAvoidDepsObjects_avoidViaCcLibrary(RULE_TYPE);
}
@Test
public void testLipoBinaryAction() throws Exception {
checkLipoBinaryAction(RULE_TYPE);
}
@Test
public void testWatchSimulatorDepCompile() throws Exception {
checkWatchSimulatorDepCompile(RULE_TYPE);
}
@Test
public void testMultiarchCcDep() throws Exception {
checkMultiarchCcDep(RULE_TYPE);
}
@Test
public void testWatchSimulatorLipoAction() throws Exception {
checkWatchSimulatorLipoAction(RULE_TYPE);
}
@Test
public void testFrameworkDepLinkFlags() throws Exception {
checkFrameworkDepLinkFlags(RULE_TYPE, new ExtraLinkArgs("-dynamiclib"));
}
@Test
public void testDylibDependencies() throws Exception {
checkDylibDependencies(RULE_TYPE, new ExtraLinkArgs("-dynamiclib"));
}
@Test
public void testMinimumOs() throws Exception {
checkMinimumOsLinkAndCompileArg(RULE_TYPE);
}
@Test
public void testMinimumOs_watchos() throws Exception {
checkMinimumOsLinkAndCompileArg_watchos(RULE_TYPE);
}
@Test
public void testMinimumOs_invalid() throws Exception {
checkMinimumOs_invalid_nonVersion(RULE_TYPE);
}
@Test
public void testAppleSdkWatchsimulatorPlatformEnv() throws Exception {
checkAppleSdkWatchsimulatorPlatformEnv(RULE_TYPE);
}
@Test
public void testAppleSdkWatchosPlatformEnv() throws Exception {
checkAppleSdkWatchosPlatformEnv(RULE_TYPE);
}
@Test
public void testAppleSdkTvsimulatorPlatformEnv() throws Exception {
checkAppleSdkTvsimulatorPlatformEnv(RULE_TYPE);
}
@Test
public void testAppleSdkTvosPlatformEnv() throws Exception {
checkAppleSdkTvosPlatformEnv(RULE_TYPE);
}
@Test
public void testWatchSimulatorLinkAction() throws Exception {
checkWatchSimulatorLinkAction(RULE_TYPE);
}
@Test
public void testAvoidDepsObjects() throws Exception {
checkAvoidDepsObjects(RULE_TYPE);
}
@Test
public void testMinimumOsDifferentTargets() throws Exception {
checkMinimumOsDifferentTargets(RULE_TYPE, "_lipobin", "_bin");
}
@Test
public void testDrops32BitArchitecture() throws Exception {
verifyDrops32BitArchitecture(RULE_TYPE);
}
}