<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[192370] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/192370">192370</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2015-11-12 11:19:40 -0800 (Thu, 12 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>run-api-tests fails to run with public iOS SDK
https://bugs.webkit.org/show_bug.cgi?id=151076

Reviewed by Alexey Proskuryakov.

Use the command line tool simctl as the sim tool was removed from the public iOS 9 SDK.

A side benefit of this change it is sufficient to run the tests without launching Simulator.app
to boot the simulator device beforehand because simctl will boot the device for us.

Additionally, use Perl pragma sigtrap to install signal handlers to catch SIG{HUP, INT, PIPE, TERM}
signals and ultimately run our END block so that we shutdown the simulator device (if applicable).
This makes Control-C terminate the app gracefully.

* Scripts/run-api-tests:
(runTest):
(listAllTests):
(prepareEnvironmentForRunningTestTool): When running for iOS Simulator use setupIOSWebKitEnvironment()
to setup the environment variables for iOS instead of using setupMacWebKitEnvironment(). We also
prefix the name of these environment variables with &quot;SIMCTL_CHILD_&quot; so that simctl sets these environment
variables in the simulator environment.
* Scripts/webkitdirs.pm:
(shutDownIOSSimulatorDevice): Added.
(restartIOSSimulatorDevice): Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsrunapitests">trunk/Tools/Scripts/run-api-tests</a></li>
<li><a href="#trunkToolsScriptswebkitdirspm">trunk/Tools/Scripts/webkitdirs.pm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (192369 => 192370)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-11-12 18:39:08 UTC (rev 192369)
+++ trunk/Tools/ChangeLog        2015-11-12 19:19:40 UTC (rev 192370)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2015-11-12  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        run-api-tests fails to run with public iOS SDK
+        https://bugs.webkit.org/show_bug.cgi?id=151076
+
+        Reviewed by Alexey Proskuryakov.
+
+        Use the command line tool simctl as the sim tool was removed from the public iOS 9 SDK.
+
+        A side benefit of this change it is sufficient to run the tests without launching Simulator.app
+        to boot the simulator device beforehand because simctl will boot the device for us.
+
+        Additionally, use Perl pragma sigtrap to install signal handlers to catch SIG{HUP, INT, PIPE, TERM}
+        signals and ultimately run our END block so that we shutdown the simulator device (if applicable).
+        This makes Control-C terminate the app gracefully.
+
+        * Scripts/run-api-tests:
+        (runTest):
+        (listAllTests):
+        (prepareEnvironmentForRunningTestTool): When running for iOS Simulator use setupIOSWebKitEnvironment()
+        to setup the environment variables for iOS instead of using setupMacWebKitEnvironment(). We also
+        prefix the name of these environment variables with &quot;SIMCTL_CHILD_&quot; so that simctl sets these environment
+        variables in the simulator environment.
+        * Scripts/webkitdirs.pm:
+        (shutDownIOSSimulatorDevice): Added.
+        (restartIOSSimulatorDevice): Added.
+
</ins><span class="cx"> 2015-11-12  KwangHyuk Kim  &lt;hyuki.kim@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] fix EvasGL configuration error
</span></span></pre></div>
<a id="trunkToolsScriptsrunapitests"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/run-api-tests (192369 => 192370)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/run-api-tests        2015-11-12 18:39:08 UTC (rev 192369)
+++ trunk/Tools/Scripts/run-api-tests        2015-11-12 19:19:40 UTC (rev 192370)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> #!/usr/bin/perl -w
</span><span class="cx"> 
</span><del>-# Copyright (C) 2010-2012, 2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (C) 2010-2012, 2014-2015 Apple Inc. All rights reserved.
</ins><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="cx"> # modification, are permitted provided that the following conditions
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> use Getopt::Long qw(:config pass_through);
</span><span class="cx"> use IPC::Open3;
</span><span class="cx"> use lib $FindBin::Bin;
</span><ins>+use sigtrap qw(die normal-signals);
</ins><span class="cx"> use webkitdirs;
</span><span class="cx"> use VCSUtils;
</span><span class="cx"> 
</span><span class="lines">@@ -108,8 +109,11 @@
</span><span class="cx"> buildTestTool() if $build &amp;&amp; !defined($root);
</span><span class="cx"> setPathForRunningWebKitApp(\%ENV);
</span><span class="cx"> 
</span><del>-# FIXME: We launch (and quit) iOS Simulator as a workaround for &lt;rdar://problem/22388812&gt;.
-relaunchIOSSimulator(findOrCreateSimulatorForIOSDevice(SIMULATOR_DEVICE_SUFFIX_FOR_WEBKIT_DEVELOPMENT)) if willUseIOSSimulatorSDKWhenBuilding();
</del><ins>+my $simulatorDevice;
+if (willUseIOSSimulatorSDKWhenBuilding()) {
+    $simulatorDevice = findOrCreateSimulatorForIOSDevice(SIMULATOR_DEVICE_SUFFIX_FOR_WEBKIT_DEVELOPMENT);
+    restartIOSSimulatorDevice($simulatorDevice);
+}
</ins><span class="cx"> my @testsToRun = listAllTests();
</span><span class="cx"> 
</span><span class="cx"> @testsToRun = grep { my $test = $_; grep { $test =~ m/^\Q$_\E/ } @ARGV; } @testsToRun if @ARGV;
</span><span class="lines">@@ -119,8 +123,7 @@
</span><span class="cx">     exit 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-# FIXME: We launch (and quit) iOS Simulator as a workaround for &lt;rdar://problem/22388812&gt;.
-END { quitIOSSimulator() if willUseIOSSimulatorSDKWhenBuilding(); }
</del><ins>+END { shutDownIOSSimulatorDevice($simulatorDevice) if $simulatorDevice; }
</ins><span class="cx"> 
</span><span class="cx"> exit runTestsBySuite(@testsToRun);
</span><span class="cx"> 
</span><span class="lines">@@ -197,8 +200,8 @@
</span><span class="cx">     foreach(testToolPaths()) {
</span><span class="cx">         my $pid;
</span><span class="cx">         my @commonArguments = ($_, $gtestArg, @ARGV);
</span><del>-        if (isIOSWebKit()) {
-            $pid = open3($childIn, $childOut, $childErr, qw(xcrun -sdk iphonesimulator sim --environment=merge), @commonArguments) or die &quot;Failed to run test: $test.&quot;;
</del><ins>+        if (willUseIOSSimulatorSDKWhenBuilding()) {
+            $pid = open3($childIn, $childOut, $childErr, qw(xcrun --sdk iphonesimulator simctl spawn), $simulatorDevice-&gt;{UDID}, @commonArguments) or die &quot;Failed to run test: $test.&quot;;
</ins><span class="cx">         } elsif (isAppleMacWebKit() &amp;&amp; architecture()) {
</span><span class="cx">             $pid = open3($childIn, $childOut, $childErr, &quot;arch&quot;, &quot;-&quot; . architecture(), archCommandLineArgumentsForRestrictedEnvironmentVariables(), @commonArguments) or die &quot;Failed to run test: $test.&quot;;
</span><span class="cx">         } else {
</span><span class="lines">@@ -270,7 +273,7 @@
</span><span class="cx">         my $pid;
</span><span class="cx">         my @commonArguments = ($_, &quot;--gtest_list_tests&quot;);
</span><span class="cx">         if (isIOSWebKit()) {
</span><del>-            $pid = open3($childIn, $childOut, $childErr, qw(xcrun -sdk iphonesimulator sim --environment=merge), @commonArguments) or die &quot;Failed to build list of tests!&quot;;
</del><ins>+            $pid = open3($childIn, $childOut, $childErr, qw(xcrun --sdk iphonesimulator simctl spawn), $simulatorDevice-&gt;{UDID}, @commonArguments) or die &quot;Failed to build list of tests!&quot;;
</ins><span class="cx">         } elsif (isAppleMacWebKit() &amp;&amp; architecture()) {
</span><span class="cx">             $pid = open3($childIn, $childOut, $childErr, &quot;arch&quot;, &quot;-&quot; . architecture(), archCommandLineArgumentsForRestrictedEnvironmentVariables(), @commonArguments) or die &quot;Failed to build list of tests!&quot;;
</span><span class="cx">         } else {
</span><span class="lines">@@ -352,6 +355,19 @@
</span><span class="cx"> {
</span><span class="cx">     return unless isAppleMacWebKit();
</span><span class="cx"> 
</span><ins>+    if (willUseIOSSimulatorSDKWhenBuilding()) {
+        my %simulatorENV;
+        {
+            local %ENV;
+            setupIOSWebKitEnvironment(productDir());
+            %simulatorENV = %ENV;
+        }
+        # Prefix the environment variables with SIMCTL_CHILD_ per `xcrun simctl help launch`.
+        foreach my $key (keys %simulatorENV) {
+            $ENV{&quot;SIMCTL_CHILD_$key&quot;} = $simulatorENV{$key};
+        }
+        return;
+    }
</ins><span class="cx">     setupMacWebKitEnvironment(productDir());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsScriptswebkitdirspm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitdirs.pm (192369 => 192370)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitdirs.pm        2015-11-12 18:39:08 UTC (rev 192369)
+++ trunk/Tools/Scripts/webkitdirs.pm        2015-11-12 19:19:40 UTC (rev 192370)
</span><span class="lines">@@ -74,6 +74,7 @@
</span><span class="cx">        &amp;productDir
</span><span class="cx">        &amp;quitIOSSimulator
</span><span class="cx">        &amp;relaunchIOSSimulator
</span><ins>+       &amp;restartIOSSimulatorDevice
</ins><span class="cx">        &amp;runIOSWebKitApp
</span><span class="cx">        &amp;runMacWebKitApp
</span><span class="cx">        &amp;safariPath
</span><span class="lines">@@ -82,6 +83,7 @@
</span><span class="cx">        &amp;setupMacWebKitEnvironment
</span><span class="cx">        &amp;sharedCommandLineOptions
</span><span class="cx">        &amp;sharedCommandLineOptionsUsage
</span><ins>+       &amp;shutDownIOSSimulatorDevice
</ins><span class="cx">        SIMULATOR_DEVICE_SUFFIX_FOR_WEBKIT_DEVELOPMENT
</span><span class="cx">        USE_OPEN_COMMAND
</span><span class="cx">    );
</span><span class="lines">@@ -2214,6 +2216,20 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub shutDownIOSSimulatorDevice($)
+{
+    my ($simulatorDevice) = @_;
+    system(&quot;xcrun --sdk iphonesimulator simctl shutdown $simulatorDevice-&gt;{UDID} &gt; /dev/null 2&gt;&amp;1&quot;);
+}
+
+sub restartIOSSimulatorDevice($)
+{
+    my ($simulatorDevice) = @_;
+    shutDownIOSSimulatorDevice($simulatorDevice);
+
+    exitStatus(system(&quot;xcrun&quot;, &quot;--sdk&quot;, &quot;iphonesimulator&quot;, &quot;simctl&quot;, &quot;boot&quot;, $simulatorDevice-&gt;{UDID})) == 0 or die &quot;Failed to boot simulator device $simulatorDevice-&gt;{UDID}&quot;;
+}
+
</ins><span class="cx"> sub relaunchIOSSimulator($)
</span><span class="cx"> {
</span><span class="cx">     my ($simulatedDevice) = @_;
</span></span></pre>
</div>
</div>

</body>
</html>