Handle pre- and post-commands gracefully in bash execution scripts.
authorAditya Mandaleeka <adityam@microsoft.com>
Tue, 15 Sep 2015 23:20:55 +0000 (16:20 -0700)
committerAditya Mandaleeka <adityam@microsoft.com>
Tue, 15 Sep 2015 23:20:55 +0000 (16:20 -0700)
Existing tests can specify pre- or post-commands that are injected into
the execution scripts. However, today these are all using Windows syntax
so they break the bash scripts. We will handle that by skipping any tests
that are using pre- or post-commands unless they specify the bash-specific
equivalent. The scripts will continue to run and just exit with an exit
code that indicates a skip, so that the skipped tests are tracked and not
just hidden.

Also, this change moves the global pre-command that was being added for
running __TestEnv into the bash/batch targets rather than in the dir.props
file that is used for all platforms.

tests/src/CLRTest.Execute.Bash.targets
tests/src/CLRTest.Execute.Batch.targets
tests/src/dir.props

index dc46efa..72d3619 100644 (file)
@@ -128,7 +128,23 @@ CLRTestExitCode=$?
     <GenerateParamList ArgumentItems="@(BashCLRTestExecutionScriptArgument)">
       <Output TaskParameter="ParamList" PropertyName="_CLRTestParamList"/>
     </GenerateParamList>
-    
+
+    <!-- If a test has precommands or postcommands but no bash-specific ones,
+         we will skip running that test. In order to enable the test on Unix,
+         the corresponding bash versions (_BashCLRTest[Pre|Post]Commands) of
+         the commands should be specified. -->
+    <PropertyGroup>
+      <ShouldSkipTest>false</ShouldSkipTest>
+      <ShouldSkipTest Condition="('$(_CLRTestPreCommands)' != '' AND '$(_BashCLRTestPreCommands)' == '') 
+                              OR ('$(_CLRTestPostCommands)' != '' AND '$(_BashCLRTestPostCommands)' == '')"
+                      >true</ShouldSkipTest>
+
+      <SkipTest>
+echo "Skipping this test due to presence of pre- or post-commands that are not bash-specific."
+exit 2 # Exit code indicating skip
+      </SkipTest>
+    </PropertyGroup>
+
     <PropertyGroup>
       <!--
       This generates the script portion to parse all of the command line arguments.
@@ -166,18 +182,30 @@ done
 
 $(BashCLRTestArgPrep)
       ]]></BashCLRTestArgPrep>
+
+      <_CLRTestExecutionScriptText Condition="$(ShouldSkipTest)">
+        <![CDATA[
+$(SkipTest)
+        ]]>
+      </_CLRTestExecutionScriptText>
+
       <!-- NOTE! semicolons must be escaped with %3B boooo -->
-      <_CLRTestExecutionScriptText><![CDATA[
+      <_CLRTestExecutionScriptText Condition="!$(ShouldSkipTest)">
+        <![CDATA[
+# The __TestEnv variable may be used to specify something to run before the test.
+$__TestEnv
+
 $(BashCLRTestArgPrep)
 $(BashCLRTestExitCodePrep)
-# Precommands
-$(_CLRTestPreCommands)
+# PreCommands
+$(_BashCLRTestPreCommands)
 # Launch
 $(BashCLRTestLaunchCmds)
 # PostCommands
-$(_CLRTestPostCommands)
+$(_BashCLRTestPostCommands)
 $(BashCLRTestExitCodeCheck)
-      ]]></_CLRTestExecutionScriptText>
+      ]]>
+      </_CLRTestExecutionScriptText>
 
     </PropertyGroup>
 
index 808532a..d32feb2 100644 (file)
@@ -184,6 +184,10 @@ setlocal
 pushd %~dp0
 $(BatchCLRTestArgPrep)
 $(BatchCLRTestExitCodePrep)
+
+REM The __TestEnv variable may be used to specify something to run before the test.
+IF NOT "%__TestEnv%"=="" call %__TestEnv%
+
 REM Precommands
 $(_CLRTestPreCommands)
 REM Launch
index 1d46bcd..725ed56 100644 (file)
@@ -12,9 +12,4 @@
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
 
-  <!-- Enable alternative JIT for testing if specified -->
-  <PropertyGroup>
-    <_CLRTestPreCommands>IF NOT "%__TestEnv%"=="" call %__TestEnv%</_CLRTestPreCommands>
-  </PropertyGroup>
 </Project>