Commit:    c02469377c1c67d8ec84e5383b2a34b34f85c81c
Author:    Matt Ficken <v-maf...@microsoft.com>         Tue, 16 Jul 2013 
16:20:46 -0700
Parents:   ae78cde1c7cc4b51728852ceb67aa9d42a55a0b0
Branches:  master

Link:       
http://git.php.net/?p=pftt2.git;a=commitdiff;h=c02469377c1c67d8ec84e5383b2a34b34f85c81c

Log:
new NSIS based installer for Windows


Former-commit-id: e5dc373c81c823988df92042e5121b1be613d4d6

Changed paths:
  M  LICENSE.txt
  M  bin/pftt_auto.cmd
  D  script/install/isetup-5.5.3.exe
  D  script/install/pftt.iss
  A  script/install/windows/PFTT-Windows.nsi
  M  src/com/mostc/pftt/host/CommonCommandManager.java
  M  src/com/mostc/pftt/host/LocalHost.java
  M  src/com/mostc/pftt/main/PfttMain.java
  M  src/com/mostc/pftt/model/core/PhptTestCase.java
  M  src/com/mostc/pftt/results/PhptTestResult.java
  M  src/com/mostc/pftt/runner/AbstractPhptTestCaseRunner2.java
  M  src/com/mostc/pftt/scenario/SAPIScenario.java
  M  src/com/mostc/pftt/scenario/WebServerScenario.java

diff --git a/LICENSE.txt b/LICENSE.txt
index d4f05f1..1fc853b 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,3 +1,5 @@
+BSD-3 Clause License
+
 Copyright (c) 2012, Microsoft Corporation
 All rights reserved.
 
diff --git a/bin/pftt_auto.cmd b/bin/pftt_auto.cmd
index 83344b9..9ebe9ca 100644
--- a/bin/pftt_auto.cmd
+++ b/bin/pftt_auto.cmd
@@ -5,7 +5,7 @@ REM set important env vars
 CALL \php-sdk\PFTT\current\bin\set_env
 SET PFTT_LIB=%PFTT_HOME%\lib
 
-SET 
CLASSPATH=%PFTT_HOME%\build;%PFTT_LIB%\mysql-connector-java-5.1.25-bin.jar;%PFTT_LIB%\apache-mime4j-0.6.jar;%PFTT_LIB%\commons-exec-1.1.jar;%PFTT_LIB%\cssparser-0.9.8.jar;%PFTT_LIB%\guava-14.0.jar;%PFTT_LIB%\hamcrest-core-1.3.jar;%PFTT_LIB%\httpclient-4.2.1.jar;%PFTT_LIB%\httpcore-4.2.1.jar;%PFTT_LIB%\httpmime-4.2.1.jar;%PFTT_LIB%\jna-3.4.0.jar;%PFTT_LIB%\jna-platform-3.4.0.jar;%PFTT_LIB%\json-20080701.jar;%PFTT_LIB%\jzlib-1.1.1.jar;%PFTT_LIB%\nekohtml-1.9.17.jar;%PFTT_LIB%\phantomjsdriver-1.0.1.jar;%PFTT_LIB%\selenium-java-2.31.0.jar;%PFTT_LIB%\htmlcleaner-2.2.jar;%PFTT_LIB%\groovy-1.8.6.jar;%PFTT_LIB%\icu4j-49_1.jar;%PFTT_LIB%\icudata.jar;%PFTT_LIB%\icutzdata.jar;%PFTT_LIB%\jansi-1.7.jar;%PFTT_LIB%\jline-0.9.94.jar;%PFTT_LIB%\xercesImpl.jar;%PFTT_LIB%\xmlpull-1.1.3.1.jar;%PFTT_LIB%\commons-cli-1.2.jar;%PFTT_LIB%\antlr-2.7.7.jar;%PFTT_LIB%\asm-3.2.jar;%PFTT_LIB%\asm-analysis-3.2.jar;%PFTT_LIB%\asm-commons-3.2.jar;%PFTT_LIB%\asm-tree-3.2.jar;%PFTT_LIB%\asm-util-3.2.jar;%PFTT_LIB%\winp-1.14.jar;%PFTT_LIB%\commons-net-3.1.jar;%PFTT_LIB%\commons-codec-1.6.jar;%PFTT_LIB%\commons-lang-2.6.jar;%PFTT_LIB%\commons-logging-1.1.1.jar;%PFTT_LIB%\jzlib-1.1.1.jar;%PFTT_LIB%\mina-core-2.0.7.jar;%PFTT_LIB%\mina-statemachine-2.0.7.jar;%PFTT_LIB%\slf4j-api-1.7.2.jar;%PFTT_LIB%\slf4j-log4j12-1.7.2.jar;%PFTT_LIB%\php_parser.jar;%PFTT_LIB%\log4j-1.2.17.jar
+SET 
CLASSPATH=%PFTT_HOME%\build;%PFTT_LIB%\javax.servlet.jar;%PFTT_LIB%\mysql-connector-java-5.1.25-bin.jar;%PFTT_LIB%\apache-mime4j-0.6.jar;%PFTT_LIB%\commons-exec-1.1.jar;%PFTT_LIB%\cssparser-0.9.8.jar;%PFTT_LIB%\guava-14.0.jar;%PFTT_LIB%\hamcrest-core-1.3.jar;%PFTT_LIB%\httpclient-4.2.1.jar;%PFTT_LIB%\httpcore-4.2.1.jar;%PFTT_LIB%\httpmime-4.2.1.jar;%PFTT_LIB%\jna-3.4.0.jar;%PFTT_LIB%\jna-platform-3.4.0.jar;%PFTT_LIB%\json-20080701.jar;%PFTT_LIB%\jzlib-1.1.1.jar;%PFTT_LIB%\nekohtml-1.9.17.jar;%PFTT_LIB%\phantomjsdriver-1.0.1.jar;%PFTT_LIB%\selenium-java-2.31.0.jar;%PFTT_LIB%\htmlcleaner-2.2.jar;%PFTT_LIB%\groovy-1.8.6.jar;%PFTT_LIB%\icu4j-49_1.jar;%PFTT_LIB%\icudata.jar;%PFTT_LIB%\icutzdata.jar;%PFTT_LIB%\jansi-1.7.jar;%PFTT_LIB%\jline-0.9.94.jar;%PFTT_LIB%\xercesImpl.jar;%PFTT_LIB%\xmlpull-1.1.3.1.jar;%PFTT_LIB%\commons-cli-1.2.jar;%PFTT_LIB%\antlr-2.7.7.jar;%PFTT_LIB%\asm-3.2.jar;%PFTT_LIB%\asm-analysis-3.2.jar;%PFTT_LIB%\asm-commons-3.2.jar;%PFTT_LIB%\asm-tree-3.2.jar;%PFTT_LIB%\asm-util-3.2.jar;%PFTT_LIB%\winp-1.14.jar;%PFTT_LIB%\commons-net-3.1.jar;%PFTT_LIB%\commons-codec-1.6.jar;%PFTT_LIB%\commons-lang-2.6.jar;%PFTT_LIB%\commons-logging-1.1.1.jar;%PFTT_LIB%\jzlib-1.1.1.jar;%PFTT_LIB%\mina-core-2.0.7.jar;%PFTT_LIB%\mina-statemachine-2.0.7.jar;%PFTT_LIB%\slf4j-api-1.7.2.jar;%PFTT_LIB%\slf4j-log4j12-1.7.2.jar;%PFTT_LIB%\php_parser.jar;%PFTT_LIB%\log4j-1.2.17.jar
 
 
 REM if user added -uac or -auto or -debug* console options, run elevated in UAC
diff --git a/script/install/isetup-5.5.3.exe b/script/install/isetup-5.5.3.exe
deleted file mode 100644
index f0a39b1..0000000
Binary files a/script/install/isetup-5.5.3.exe and /dev/null differ
diff --git a/script/install/pftt.iss b/script/install/pftt.iss
deleted file mode 100644
index 0c9df30..0000000
--- a/script/install/pftt.iss
+++ /dev/null
@@ -1,34 +0,0 @@
-;http://www.jrsoftware.org/ishelp/
-[Setup]
-AppName=PFTT
-AppVersion=0.5
-DefaultDirName=C:\php-sdk\PFTT\current
-; TODO additional metadata
-DefaultGroupName=PFTT
-;UninstallDisplayIcon={app}\MyProg.exe
-Compression=lzma2
-SolidCompression=yes
-OutputDir=C:\php-sdk\PFTT\current\scripts\install\windows
-DirExistsWarning=no
-CreateAppDir=yes
-; Require at least Windows 6.0 (Vista+)
-MinVersion=6.0
-
-[Files]
-; 
http://stackoverflow.com/questions/10645269/inno-setup-exclude-a-directory-and-its-files-also
-; TODO excludes doesn't work
-; TODO exclude files in root of c:\php-sdk\pftt\current
-Source: "C:\php-sdk\PFTT\current\*"; Excludes: ".git"; DestDir: "{app}"; 
Flags: ignoreversion recursesubdirs createallsubdirs;
-Source: "C:\php-sdk\PFTT\current\*"; Excludes: "src"; DestDir: "{app}"; Flags: 
ignoreversion recursesubdirs createallsubdirs;
-Source: "C:\php-sdk\PFTT\current\*"; Excludes: "cache\working"; DestDir: 
"{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
-Source: "C:\php-sdk\PFTT\current\*"; Excludes: ".settings"; DestDir: "{app}"; 
Flags: ignoreversion recursesubdirs createallsubdirs;
-Source: "C:\php-sdk\PFTT\current\*"; Excludes: "scripts\install"; DestDir: 
"{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
-
-; TODO don't include `jre` folder on non-windows
-; TODO start menu entry
-
-;[Icons]
-;Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
-
-;[Run]
-;Filename: "{app}\bin\PFTT Shell.LNK"; Parameters: "/nowait"
diff --git a/script/install/windows/PFTT-Windows.nsi 
b/script/install/windows/PFTT-Windows.nsi
new file mode 100644
index 0000000..914d9ee
--- /dev/null
+++ b/script/install/windows/PFTT-Windows.nsi
@@ -0,0 +1,128 @@
+Name "PFTT"
+
+OutFile "\php-sdk\PFTT\PFTT-Windows-x86-VERSION.exe"
+
+RequestExecutionLevel admin
+XPStyle on
+
+# meta-data
+VIAddVersionKey /LANG=1033-English "ProductName" "PFTT"
+VIAddVersionKey /LANG=1033-English "Comments" "Full Coverage test tool for the 
PHP Ecosystem"
+VIAddVersionKey /LANG=1033-English "CompanyName" "Microsoft"
+VIAddVersionKey /LANG=1033-English "LegalCopyright" "� 2013 Microsoft Open 
Source Technology Center"
+VIAddVersionKey /LANG=1033-English "FileDescription" "Full Coverage test tool 
for the PHP Ecosystem"
+VIAddVersionKey /LANG=1033-English "FileVersion" "1.2.3.4"
+VIProductVersion "1.2.3.4"
+
+# see http://nsis.sourceforge.net/Docs/Chapter4.html
+ShowInstDetails show
+ShowUnInstDetails show 
+SetCompressor /SOLID lzma
+SetCompressorDictSize 30
+SetDateSave off
+SetOverwrite on
+AllowSkipFiles off
+
+# ask user to accept the license
+Page license
+LicenseData \php-sdk\PFTT\current\LICENSE.txt
+
+# value will be replaced in onInit
+InstallDir ""
+
+Function .onInit
+       # check Windows version
+       ReadRegStr $R4 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" 
CurrentVersion
+       # $R4 will be 6.0 6.1 6.2
+       # check that it starts with 6
+       StrCpy $R3 $R4 1 0
+       StrCmp $R3 '6' windows_ok
+       MessageBox MB_OK "Only Windows 6.x is supported (upgrade to Windows 
Vista+/7/8/2012/2008r2, etc...)"
+       Quit
+  
+       windows_ok:
+  
+
+       # get %SYSTEMDRIVE%  (should be an NSIS constant like %WINDIR% but its 
not)
+       ReadEnvStr $R5 SYSTEMDRIVE
+
+       # InstallDir is a compile-time directive, but can replace it at 
run-time like so
+       StrCpy $INSTDIR "$R5\php-sdk\PFTT\current"
+FunctionEnd
+
+# comment this line out: do NOT ask user to confirm install directory (go with 
the $INSTDIR value calculated in .onInit)
+# Page directory
+
+# ask user to confirm start menu entries
+Page custom StartMenuGroupSelect "" ": Start Menu Folder"
+Function StartMenuGroupSelect
+       Push $R1
+
+       StartMenu::Select /checknoshortcuts "Don't create a start menu folder" 
/autoadd /lastused $R0 "PFTT"
+       Pop $R1
+
+       StrCmp $R1 "success" success
+       StrCmp $R1 "cancel" done
+               ; error
+               MessageBox MB_OK $R1
+               StrCpy $R0 "PFTT Install Cancelled" # use default
+               Return
+       success:
+       Pop $R0
+
+       done:
+       Pop $R1
+FunctionEnd
+
+# install files and set registry entries
+Page instfiles
+# TODO 
+Section
+       SetOutPath $INSTDIR
+       # TODO must manually delete script\install\Windows\*.exe
+       # TODO must manually move conf\internal bin\internal cache\working\*
+       # NOTE for some reason .git is skipped here already for some reason
+       File /r /x *.git* /x *conf\internal* /x *bin\internal* /x 
*cache\working* /x *scripts\install* \php-sdk\PFTT\current\*
+       
+       WriteUninstaller $INSTDIR\uninstaller.exe
+       
+       # add entry to `Programs & Features` page in Control Panel
+       WriteRegStr HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\PFTT" "DisplayName" "PFTT"
+       WriteRegStr HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\PFTT" "InstallLocation" 
"$INSTDIR"
+       WriteRegStr HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\PFTT" "Publisher" 
"Microsoft Open Source Technology Center"
+       WriteRegStr HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\PFTT" "UninstallString" 
"$INSTDIR\uninstaller.exe"
+SectionEnd
+Section
+       # this part is only necessary if you used /checknoshortcuts
+       StrCpy $R1 $R0 1
+       StrCmp $R1 ">" skip
+               # run this block if not /checknoshortcuts
+               
+               SetShellVarContext All
+               CreateDirectory "$SMPROGRAMS\$R0"
+               CreateShortCut "$SMPROGRAMS\$R0\PFTT Shell.lnk" 
"$INSTDIR\BIN\PFTT Shell.lnk"           
+               CreateShortCut "$SMPROGRAMS\$R0\PFTT Documentation.lnk" 
"$INSTDIR\DOC"          
+               CreateShortCut "$SMPROGRAMS\$R0\PHP on Windows.lnk" 
"http://windows.php.net/";
+               CreateShortCut "$SMPROGRAMS\$R0\PHP Bugs.lnk" 
"http://bugs.php.net/";
+               CreateShortCut "$SMPROGRAMS\$R0\PFTT Homepage.lnk" 
"http://github.com/OSTC/PFTT2/";
+               CreateShortCut "$SMPROGRAMS\$R0\Uninstall PFTT.lnk" 
"$INSTDIR\uninstaller"
+       skip:
+SectionEnd
+
+# prompt user to run the PFTT shell when installation is finished (so user 
gets started/engaged quickly)
+Function .onInstSuccess
+       MessageBox MB_YESNO "PFTT is installed.$\r$\n$\r$\nRun PFTT Shell?" 
IDNO NoPFTTShell
+               ExecShell "open" "$INSTDIR\BIN\PFTT Shell.lnk" SW_SHOWMAXIMIZED
+       NoPFTTShell:
+FunctionEnd
+
+# confirm uninstalling PFTT
+UninstPage uninstConfirm
+
+# delete files and registry key
+UninstPage instfiles
+Section "Uninstall"
+       # remove from `Programs & Features` page in Control Panel
+       DeleteRegKey HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\PFTT"
+       Delete $INSTDIR
+SectionEnd
diff --git a/src/com/mostc/pftt/host/CommonCommandManager.java 
b/src/com/mostc/pftt/host/CommonCommandManager.java
index b6f3469..d94c475 100644
--- a/src/com/mostc/pftt/host/CommonCommandManager.java
+++ b/src/com/mostc/pftt/host/CommonCommandManager.java
@@ -21,7 +21,7 @@ public class CommonCommandManager {
                                win_close_all_handles_lock.tryLock(10, 
TimeUnit.SECONDS);
                        } catch ( InterruptedException ex ) {}
                        try {
-                               handle_out = host.execOut("handle -accepteula 
-p "+process_id+" -a", 10);
+                               handle_out = 
host.execOut(host.getPfttDir()+"\\bin\\handle -accepteula -p "+process_id+" 
-a", 10);
                        } finally {
                                try {
                                win_close_all_handles_lock.unlock();
@@ -34,7 +34,7 @@ public class CommonCommandManager {
                                        String handle_type = h_part[1];
                                        if (handle_id.endsWith(":") && 
handle_type.equalsIgnoreCase("File")) {
                                                handle_id = 
handle_id.substring(0, handle_id.length()-1);
-                                               String handle_cmd = "handle 
-accepteula -p "+process_id+" -y -c "+handle_id;
+                                               String handle_cmd = 
host.getPfttDir()+"\\bin\\handle -accepteula -p "+process_id+" -y -c 
"+handle_id;
                                                try {
                                                        
win_close_all_handles_lock.tryLock(10, TimeUnit.SECONDS);
                                                } catch ( InterruptedException 
ex ) {}
@@ -70,7 +70,7 @@ public class CommonCommandManager {
                                        win_kill_process_lock.tryLock(5, 
TimeUnit.SECONDS);
                                } catch ( InterruptedException ex ) {}
                                try {
-                                       host.exec("pskill -accepteula -t -p 
"+process_id, 20);
+                                       
host.exec(host.getPfttDir()+"\\bin\\pskill -accepteula -t -p "+process_id, 20);
                                        //host.exec("TASKKILL /FI \"IMAGENAME 
eq "+image_name+"\" /FI \"PID eq "+process_id+"\" /F /T", 20);
                                } finally {
                                        try {
@@ -82,7 +82,7 @@ public class CommonCommandManager {
                                        win_kill_process_lock.tryLock(5, 
TimeUnit.SECONDS);
                                } catch ( InterruptedException ex ) {}
                                try {                                   
-                                       host.exec("pskill -accepteula -t -p 
"+process_id, 20);
+                                       
host.exec(host.getPfttDir()+"\\bin\\pskill -accepteula -t -p "+process_id, 20);
                                        //host.exec("TASKKILL /FI \"IMAGENAME 
eq "+image_name+"\" /FI \"PID eq "+process_id+"\" /F /T", 20);
                                } finally {
                                        try {
diff --git a/src/com/mostc/pftt/host/LocalHost.java 
b/src/com/mostc/pftt/host/LocalHost.java
index cbd35f5..6cbd3c7 100644
--- a/src/com/mostc/pftt/host/LocalHost.java
+++ b/src/com/mostc/pftt/host/LocalHost.java
@@ -281,6 +281,12 @@ public class LocalHost extends AHost {
                return System.getProperty("user.name");
        }
        
+       protected static final UncaughtExceptionHandler  
IGNORE_EXCEPTION_HANDLER = new UncaughtExceptionHandler () {
+                       @Override
+                       public void uncaughtException(Thread arg0, Throwable 
arg1) {
+                               // ignore, do nothing
+                       }
+               };
        public class LocalExecHandle extends ExecHandle {
                protected int exit_code = 0;
                protected final AtomicReference<Process> process;
@@ -326,7 +332,11 @@ public class LocalHost extends AHost {
                        final Process p = this.process.get();
                        if (p==null)
                                return;
+                       // @see #exec_copy_lines
                        run.set(false);
+                       synchronized(run) {
+                               run.notifyAll();
+                       }
                        
                        // sometimes it can take a while to #close a 
process(especially on Windows)... do it in a thread
                        // to avoid blocking for too long. however, we don't 
want to have too many threads
@@ -466,7 +476,7 @@ public class LocalHost extends AHost {
                                                                
close_thread_set.remove(calling_thread);
                                                }
                                                synchronized(tlock) {
-                                               tlock.notifyAll();
+                                                       tlock.notifyAll();
                                                }
                                                
                                                // encourage JVM to free up the 
Windows process handle (may have problems if too many are left open too long)
@@ -536,7 +546,49 @@ public class LocalHost extends AHost {
                        System.gc();
                } // end protected void run
                                
-               protected void exec_copy_lines(StringBuilder sb, InputStream 
in, Charset charset) throws IOException {
+               @SuppressWarnings("deprecation")
+               protected void exec_copy_lines(final StringBuilder sb, final 
InputStream in, final Charset charset) throws IOException {
+                       if (isWindows()) {
+                               final AtomicBoolean copy_thread_lock = new 
AtomicBoolean(true);
+                               Thread copy_thread = new Thread() {
+                                               public void run() {
+                                                       try {
+                                                               
do_exec_copy_lines(sb, in, charset);
+                                                               
copy_thread_lock.set(false);
+                                                               
synchronized(run) {
+                                                                       
run.notifyAll();
+                                                               }
+                                                       } catch (IOException e) 
{
+                                                               // TODO 
Auto-generated catch block
+                                                               
e.printStackTrace();
+                                                       }
+                                               }
+                                       };
+                               
copy_thread.setName("Copy"+copy_thread.getName());
+                               copy_thread.setDaemon(true);
+                               
copy_thread.setUncaughtExceptionHandler(IGNORE_EXCEPTION_HANDLER);
+                               copy_thread.start();
+                               while (true) {
+                                       synchronized(run) {
+                                               try {
+                                                       run.wait();
+                                               } catch ( InterruptedException 
ex ) {}
+                                       }
+                                       if (!copy_thread_lock.get()) {
+                                               // stopped normally
+                                               break;
+                                       } else if (!run.get()) {
+                                               // try killing copy thread 
since its still running after it was supposed to stop
+                                               copy_thread.stop(new 
RuntimeException());
+                                               break;
+                                       }
+                               }
+                       } else {
+                               do_exec_copy_lines(sb, in, charset);
+                       }
+               }
+               
+               protected void do_exec_copy_lines(StringBuilder sb, InputStream 
in, Charset charset) throws IOException {
                        DefaultCharsetDeciderDecoder d = charset == null ? null 
: PhptTestCase.newCharsetDeciderDecoder();
                        ByLineReader reader = charset == null ? new 
NoCharsetByLineReader(new java.io.BufferedInputStream(in)) : new 
MultiCharsetByLineReader(in, d);
                        String line;
diff --git a/src/com/mostc/pftt/main/PfttMain.java 
b/src/com/mostc/pftt/main/PfttMain.java
index a202c69..9eea7ce 100644
--- a/src/com/mostc/pftt/main/PfttMain.java
+++ b/src/com/mostc/pftt/main/PfttMain.java
@@ -78,13 +78,23 @@ import 
com.mostc.pftt.util.WindowsSnapshotDownloadUtil.FindBuildTestPackPair;
 // real unattended (automated) testing that actually works
 // the php test tool that you'd actually want to use
 // doesn't resort to brittle shell scripts
+//
+// useful to test the whole stack you're running your application on
+//     -test the php build
+//     -test the web server build
+//
 /* -rename ostcpftt@ name to `OSTC PFTT Unattended Test System`
        -name still clear who owns it
                -plus database field would tell
        -only `php` is missing from new name, but any 2nd/3rd party who saw the 
name wouldn't care about that
                -just care about owner*/
 
+// TODO enchant scenario
+//      skips on 5.4 cli apache ts
+//      skips on 5.5 cli apache ts 
 // TODO new nsis based installer for windows
+//        -works, but need to exclude some directories
+//        -improve documentation, improve instructions
 // TODO linux apache support
 // TODO linux .sh installer
 // TODO iis support
@@ -93,6 +103,16 @@ import 
com.mostc.pftt.util.WindowsSnapshotDownloadUtil.FindBuildTestPackPair;
 //        so php cli and apache on linux can be compared to windows
 //           for any windows specific memory problems, etc...
 // TODO -debug_all -debugger gdb
+// TODO use multiple phpt test-packs
+//     -in same result-pack
+//         -don't change PHPT report form though
+//     -for console-args
+// TODO get custom DLL from custom test-pack
+// TODO mssql scenario
+//     -for both `sql server` and `azure sql`?
+//     -supply mssql binary using console args (custom_ext task)
+//           -or include in pftt's cache/dep
+//     -use mssql PHPTs as a separate PhptTestPack until they are integrated 
with PhpCore
 // TODO xdebug only for 5.4-ts
 // TODO task/code_coverage store in result-pack
 // TODO get code coverage data of Symfony demo app (UI?)
diff --git a/src/com/mostc/pftt/model/core/PhptTestCase.java 
b/src/com/mostc/pftt/model/core/PhptTestCase.java
index f7c01d1..4b47f14 100644
--- a/src/com/mostc/pftt/model/core/PhptTestCase.java
+++ b/src/com/mostc/pftt/model/core/PhptTestCase.java
@@ -1020,7 +1020,7 @@ public class PhptTestCase extends TestCase {
                        "tests/basic/022.phpt",
                };
        /** SPEC: PHPT tests are given 60 seconds to execute. If they have not 
finished by then,
-        * they are killed and whatever output (if any) they returned is used 
to evalute for PASS/FAIL.
+        * they are killed and whatever output (if any) they returned is used 
to evaluate for PASS/FAIL.
         * 
         * Note: tests reach their time limit and EXPECT no output will 
probably PASS (unless they CRASH)
         * because they probably returned no output.  
diff --git a/src/com/mostc/pftt/results/PhptTestResult.java 
b/src/com/mostc/pftt/results/PhptTestResult.java
index 242913a..7e88713 100644
--- a/src/com/mostc/pftt/results/PhptTestResult.java
+++ b/src/com/mostc/pftt/results/PhptTestResult.java
@@ -250,7 +250,7 @@ public class PhptTestResult implements ISerializer {
                        // TODO serial.attribute(null, "host", host.getName());
                
                // normally only need the rest of the information if the test 
failed
-               if (include_all) {
+               if (true) {// TODO include_all) {
                        
                        if (StringUtil.isNotEmpty(actual)) {
                                serial.startTag(null, "actual");
diff --git a/src/com/mostc/pftt/runner/AbstractPhptTestCaseRunner2.java 
b/src/com/mostc/pftt/runner/AbstractPhptTestCaseRunner2.java
index 5d17317..c5180be 100644
--- a/src/com/mostc/pftt/runner/AbstractPhptTestCaseRunner2.java
+++ b/src/com/mostc/pftt/runner/AbstractPhptTestCaseRunner2.java
@@ -452,7 +452,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
                        }
                        if (expected_re_match) {
 
-                               twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, null)));
+                               twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig())));
                                                
                                return;
                        } 
@@ -465,7 +465,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
                                }
                                if (expected_re_match) {
        
-                                       twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, null)));
+                                       twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig())));
                                                        
                                        return;
                                }
@@ -488,7 +488,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
                                }
                                if (expected_re_match) {
 
-                                       twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, null)));
+                                       twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig())));
                                                        
                                        return;
                                }
@@ -501,7 +501,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
                                        }
                                        if (expected_re_match) {
        
-                                               twriter.addResult(host, 
scenario_set, notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, null)));
+                                               twriter.addResult(host, 
scenario_set, notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig())));
                                                                
                                                return;
                                        }
@@ -531,7 +531,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
                                // compare again
                                if (equalsNoWS(output, expected)) {
                                        
-                                       twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, null)));
+                                       twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig())));
                                        
                                        return;
                                } // end if
@@ -541,7 +541,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
                        String output_trim = output.trim();
                        
                        if 
(StringUtil.isEmpty(output_trim)||(output.contains("<html>")&&!output.contains("404")))
 {
-                               twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, null)));
+                               twriter.addResult(host, scenario_set, 
notifyPassOrXFail(new PhptTestResult(host, 
test_case.isXFail()?EPhptTestStatus.XFAIL:EPhptTestStatus.PASS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig())));
                                
                                return;
                        }
@@ -564,7 +564,7 @@ public abstract class AbstractPhptTestCaseRunner2 extends 
AbstractPhptTestCaseRu
 
                PhptTestResult result;
                if (test_case.isXFail()) {
-                       result = notifyNotPass(new PhptTestResult(host, 
is_timeout?EPhptTestStatus.TIMEOUT:EPhptTestStatus.XFAIL_WORKS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual));
+                       result = notifyNotPass(new PhptTestResult(host, 
is_timeout?EPhptTestStatus.TIMEOUT:EPhptTestStatus.XFAIL_WORKS, test_case, 
output, null, null, charset, ini, env, splitCmdString(), stdin_post, 
getShellScript(), null, null, preoverride_actual, getSAPIOutput(), 
getSAPIConfig()));
                } else {
                        result = notifyNotPass(notifyFail(new 
PhptTestResult(host, is_timeout?EPhptTestStatus.TIMEOUT:EPhptTestStatus.FAIL, 
test_case, output, actual_lines, expected_lines, charset, ini, env, 
splitCmdString(), stdin_post, getShellScript(), diff, expectf, 
preoverride_actual, getSAPIOutput(), getSAPIConfig())));
                }
diff --git a/src/com/mostc/pftt/scenario/SAPIScenario.java 
b/src/com/mostc/pftt/scenario/SAPIScenario.java
index e345992..575a8e7 100644
--- a/src/com/mostc/pftt/scenario/SAPIScenario.java
+++ b/src/com/mostc/pftt/scenario/SAPIScenario.java
@@ -154,6 +154,7 @@ public abstract class SAPIScenario extends 
AbstractSerialScenario {
                        "ext/intl/tests/rbbiter_getbinaryrules_basic.phpt",
                        "ext/intl/tests/rbbiter_getrules_basic.phpt",
                        "ext/mbstring/tests/mb_ereg_replace-compat-03.phpt",
+                       "ext/iconv/tests/ob_iconv_handler.phpt",
                        "sapi/cli/tests/cli_process_title_windows.phpt",
                        "ext/mbstring/tests/ini_language.phpt",
                        "ext/mbstring/tests/mb_parse_str02.phpt",
diff --git a/src/com/mostc/pftt/scenario/WebServerScenario.java 
b/src/com/mostc/pftt/scenario/WebServerScenario.java
index a79417c..a37bbed 100644
--- a/src/com/mostc/pftt/scenario/WebServerScenario.java
+++ b/src/com/mostc/pftt/scenario/WebServerScenario.java
@@ -225,7 +225,6 @@ public abstract class WebServerScenario extends 
SAPIScenario {
                        "ext/standard/tests/strings/004.phpt",
                        "ext/mbstring/tests/bug63447_001.phpt",
                        "ext/mbstring/tests/bug63447_002.phpt",
-                       "ext/iconv/tests/ob_iconv_handler.phpt",
                        "ext/mbstring/tests/mb_strcut.phpt",
                        "ext/mbstring/tests/mb_decode_numericentity.phpt",
                        //////////////////

Reply via email to