/*
* Copyright 2015-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.apple.simulator;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assume.assumeTrue;
import com.facebook.buck.testutil.integration.TestDataHelper;
import com.facebook.buck.util.FakeProcess;
import com.facebook.buck.util.FakeProcessExecutor;
import com.facebook.buck.util.ProcessExecutorParams;
import com.facebook.buck.util.environment.Platform;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Paths;
import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
/** Unit tests for {@link AppleSimulatorDiscovery}. */
public class AppleSimulatorDiscoveryTest {
@Before
public void setUp() {
assumeTrue(Platform.detect() == Platform.MACOS || Platform.detect() == Platform.LINUX);
}
@Test
public void appleSimulatorsDiscoveredFromSimctlList() throws IOException, InterruptedException {
ImmutableSet<AppleSimulator> simulators;
try (OutputStream stdin = new ByteArrayOutputStream();
InputStream stdout = getClass().getResourceAsStream("testdata/simctl-list.txt");
InputStream stderr = new ByteArrayInputStream(new byte[0])) {
FakeProcess fakeXcrunSimctlList = new FakeProcess(0, stdin, stdout, stderr);
ProcessExecutorParams processExecutorParams =
ProcessExecutorParams.builder()
.setCommand(ImmutableList.of("path/to/simctl", "list"))
.build();
FakeProcessExecutor fakeProcessExecutor =
new FakeProcessExecutor(ImmutableMap.of(processExecutorParams, fakeXcrunSimctlList));
simulators =
AppleSimulatorDiscovery.discoverAppleSimulators(
fakeProcessExecutor, Paths.get("path/to/simctl"));
}
ImmutableSet<AppleSimulator> expected =
ImmutableSet.<AppleSimulator>builder()
.add(
AppleSimulator.builder()
.setName("iPhone 4s")
.setUdid("F7C1CC9A-945E-4258-BA84-DEEBE683798B")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.add(
AppleSimulator.builder()
.setName("iPhone 5")
.setUdid("45BD7164-686C-474F-8C68-3730432BC5F2")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.add(
AppleSimulator.builder()
.setName("iPhone 5s")
.setUdid("70200ED8-EEF1-4BDB-BCCF-3595B137D67D")
.setSimulatorState(AppleSimulatorState.BOOTED)
.build())
.add(
AppleSimulator.builder()
.setName("iPhone 6 Plus")
.setUdid("92340ACF-2C44-455F-BACD-573B133FB20E")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.add(
AppleSimulator.builder()
.setName("iPhone 6")
.setUdid("A75FF972-FE12-4656-A8CC-99572879D4A3")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.add(
AppleSimulator.builder()
.setName("iPad 2")
.setUdid("CC1B0BAD-BAE6-4A53-92CF-F79850654057")
.setSimulatorState(AppleSimulatorState.SHUTTING_DOWN)
.build())
.add(
AppleSimulator.builder()
.setName("iPad Retina")
.setUdid("137AAA25-54A1-42E8-8202-84DEADD668E1")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.add(
AppleSimulator.builder()
.setName("iPad Air")
.setUdid("554B2E0F-63F3-4400-8319-5C5062CF4C95")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.add(
AppleSimulator.builder()
.setName("Resizable iPhone")
.setUdid("58E3748F-F7E6-4A45-B52C-A136B59F7A42")
.setSimulatorState(AppleSimulatorState.CREATING)
.build())
.add(
AppleSimulator.builder()
.setName("Resizable iPad")
.setUdid("56FE1CBC-61FF-443D-8E23-19D05864C6DB")
.setSimulatorState(AppleSimulatorState.SHUTDOWN)
.build())
.build();
assertThat(simulators, is(equalTo(expected)));
}
@Test
public void appleSimulatorProfileDiscoveredFromPlist() throws Exception {
AppleSimulator simulator =
AppleSimulator.builder()
.setName("iPhone 5s")
.setUdid("70200ED8-EEF1-4BDB-BCCF-3595B137D67D")
.setSimulatorState(AppleSimulatorState.BOOTED)
.build();
Optional<AppleSimulatorProfile> simulatorProfile =
AppleSimulatorDiscovery.discoverAppleSimulatorProfile(
simulator, TestDataHelper.getTestDataDirectory(this));
Optional<AppleSimulatorProfile> expected =
Optional.of(
AppleSimulatorProfile.builder()
.addSupportedProductFamilyIDs(1)
.addSupportedArchitectures("i386", "x86_64")
.build());
assertThat(simulatorProfile, is(equalTo(expected)));
}
}