Author: jbeard
Date: Tue Jun 22 00:26:16 2010
New Revision: 956751

URL: http://svn.apache.org/viewvc?rev=956751&view=rev
Log:
Added code to build.js to make in-browser unit testing work in selenium. 
Everything works now.

Modified:
    commons/sandbox/gsoc/2010/scxml-js/branches/browser-tests.1.ie/build.js

Modified: 
commons/sandbox/gsoc/2010/scxml-js/branches/browser-tests.1.ie/build.js
URL: 
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/browser-tests.1.ie/build.js?rev=956751&r1=956750&r2=956751&view=diff
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-js/branches/browser-tests.1.ie/build.js 
(original)
+++ commons/sandbox/gsoc/2010/scxml-js/branches/browser-tests.1.ie/build.js Tue 
Jun 22 00:26:16 2010
@@ -134,6 +134,17 @@ require.def("build",
                                */
                        ]
 
+                       var htmlInBrowserUnitTestsGenerated = [
+                               /*
+                                 {
+                                        code : String, 
+                                        path : String, 
+                                        test : performance/usability test,
+                                        ie : boolean
+                                  }
+                               */
+                       ]
+
                        var performanceResults = [
                                /*
                                  {
@@ -300,7 +311,8 @@ require.def("build",
                                                        scriptsGenerated.
                                                                
filter(function(s){return scxmlTests[s.scxmlTest] == testScript.scxmlTest}).
                                                                
forEach(function(generatedScript){
-
+                                                               
+                                                               //FIXME: this 
may need to be refactored
                                                                var testHtml = 
htmlGenFn(generatedScript.name,testScriptRelativePath);
 
                                                                //write testHtml
@@ -326,6 +338,64 @@ require.def("build",
 
                                },
 
+                               _genInBrowserHtml : 
function(fileDescriptor,testsGeneratedCollection){
+
+                                       //for each type of browser (IE and 
non-IE) [though we can make this part dynamic
+                                       //for each unit test script
+                                               //and its corresponding html 
test
+                                       //for each backend
+
+                                       print("Generating in-browser html test 
files...");
+
+
+                                       var compileTargets = 
[{scxmlTest:scxmlTest, backend:backend, isIE:isIE} 
+                                                               for (scxmlTest 
in scxmlTests) 
+                                                               for (backend in 
backends)
+                                                               for each (isIE 
in [true,false])];
+
+                                       compileTargets.forEach(function(target){
+                                               //run the build script on the 
test
+                                               var scxmlTestName = 
target.scxmlTest;
+                                               var backendName = 
target.backend;
+                                               var isIE = target.isIE;
+
+                                               var pathToSCXMLTest = 
scxmlTests[scxmlTestName];
+
+                                               var correspondingUnitTests = 
unitTestScripts.filter(function(t){return t.scxmlTest == pathToSCXMLTest});
+
+                                               
correspondingUnitTests.forEach(function(unitTest){
+
+                                                       var pathToUnitTest = 
unitTest.path;
+
+                                                       var 
relativePathToUnitTest  = "../" + pathToUnitTest;
+
+                                                       var testHtml = 
inBrowserUnitTestHtmlTemplate(pathToSCXMLTest,relativePathToUnitTest,backendName,isIE);
+
+                                                       //write testHtml
+                                                       var fpath = buildDir + 
"/" + fileDescriptor + "_" + scxmlTestName  + "_" + backendName 
+                                                                       + (isIE 
? "IE" : "") + ".html";
+
+                                                       print("Writing 
in-browser html test file " + fpath);
+
+                                                       
utilFile.writeFile(testHtml,fpath);
+
+                                                       //save the path to the 
html for running in selenium later
+                                                       
testsGeneratedCollection.push({
+                                                                path : fpath, 
+                                                                scxmlTest : 
scxmlTestName,
+                                                                testCasePath : 
pathToUnitTest,
+                                                                backend : 
backendName,
+                                                                ie : isIE
+                                                       });
+
+                                               }); 
+
+                                               
+                                       });
+
+                               },
+
+
                                genPerformanceTestHtml : function(callback){
                                        print("Generating html performance test 
files...");
                                        this._genHtml( performanceTestScripts, 
@@ -437,6 +507,7 @@ require.def("build",
                                },
 
                                runUnitTestsWithSelenium : function(){
+
                                        this.genUnitTestHtml(function(){
                                                print("Running Selenium unit 
tests...");
 
@@ -508,6 +579,84 @@ require.def("build",
                                        });
                                },
 
+                               genInBrowserUnitTestHtml : function(){
+                                       print("Generating html performance test 
files...");
+                                       
this._genInBrowserHtml("in-browser-unit",htmlInBrowserUnitTestsGenerated);
+                               },
+
+                               runInBrowserUnitTestsWithSelenium : function(){
+                                       this.genInBrowserUnitTestHtml();
+
+                                       print("Running Selenium unit tests...");
+
+                                       for(var browserName in browsers){ 
+
+                                               print("Running test for " + 
browserName + "...");
+
+                                               var bSpec = 
browsers[browserName];
+                                               var bSel = new 
DefaultSelenium(bSpec.host, bSpec.port, bSpec.browser, seleniumConf.rootUrl);
+                                               bSel.start();
+
+                                               
htmlInBrowserUnitTestsGenerated.forEach(function(htmlTest){
+                                                       //ensure we are not 
testing an ie html test
+                                                       //on a non-ie browser
+                                                       if(htmlTest.ie == 
bSpec.ie){
+
+                                                               var 
unitTestResult = unitTestWithSelenium(bSel,htmlTest.path); 
+
+                                                               var 
unitTestResultObj = {
+                                                                       data : 
unitTestResult,
+                                                                       browser 
: browserName,
+                                                                       
scxmlTest : htmlTest.scxmlTest,
+                                                                       backend 
: htmlTest.backend,
+                                                               };
+
+                                                               
unitTestResults.push(unitTestResultObj);
+
+                                                               //report errors 
and failures that may occur
+                                                               
if(unitTestResult.failCount || unitTestResult.errorCount){
+                                                                       
print("UNIT TEST ERROR");
+                                                                       
print(JSON.stringify(unitTestResultObj));
+                                                               }
+                                                       }
+                                               });
+
+                                               bSel.stop();
+                                       }
+
+                                       //make one big, self-describing data 
structure
+                                       //this is what analyze uses to do its 
analyses
+                                       allUnitTestResults = {
+                                               //FIXME: maybe make this an 
obj, so that we can add more info to it (for reports, etc.)
+                                               data : unitTestResults, 
+                                               browsers : browsers,
+                                               backends : backends,
+                                               scxmlTests : scxmlTests
+                                       };
+
+                                       //stringify it, and serialize it for 
posterity
+                                       var allUnitTestResultsString = 
+                                                       
JSON.stringify(allUnitTestResults)
+
+
+                                       //print report that says whether all 
tests passed
+                                       var totalTests = 
unitTestResults.reduce(function(a,b){return a + b.data.testCount},0);
+                                       var totalTestsFailed = 
unitTestResults.reduce(function(a,b){return a + b.data.errorCount},0);
+                                       var totalTestsErrored = 
unitTestResults.reduce(function(a,b){return a + b.data.failCount},0);
+                                       var totalTestsPassed = 
unitTestResults.reduce(function(a,b){return a + b.data.testsPassed},0);
+
+                                       print("Test Results:");
+                                       print("Total Tests: " + totalTests);
+                                       print("Total Tests Failed: " + 
totalTestsFailed);
+                                       print("Total Tests Errored: " + 
totalTestsErrored);
+                                       print("Total Tests Passed: " + 
totalTestsPassed);
+
+                                       var unitTestResultsPath = 
"build/allUnitTestResults.json";
+                                       print("writing a summary of performance 
results to " + unitTestResultsPath);
+                                       
utilFile.writeFile(allUnitTestResultsString, unitTestResultsPath);
+                               },
+
+
 
                                runUnitTestsWithRhino : function(){
 
@@ -638,6 +787,60 @@ require.def("build",
                                </html>
                        }
 
+                       function 
inBrowserUnitTestHtmlTemplate(modulePathToXMLTest,testScriptRelativePath,backendName,isIE){
+                               default xml namespace = "";
+                               return <html>
+                               <head>
+                                       <script 
src="../lib/js/requirejs/require.js" type="text/javascript">true;</script>
+                                       <script 
src="../lib/js/requirejs/require/xml.js" type="text/javascript">true;</script>
+                                       <script djConfig="isDebug:true" 
src="../lib/test-js/dojo-release-1.4.2-src/dojo/dojo.js" 
type="text/javascript">true;</script>
+                                       <script type="text/javascript">
+                                               dojo.require("doh.runner");
+                                               window.dohIsComplete = false;
+                                               window.oldDohOnEnd = 
window.doh._onEnd;
+                                               window.doh._onEnd = function() 
&#x7B; window.dohIsComplete = true; window.oldDohOnEnd.apply(window.doh); 
&#x7D;;
+                                       </script>
+                                       <script src="../test/testHelpers.js" 
type="text/javascript">true;</script>
+                                       <script src={testScriptRelativePath} 
type="text/javascript">true;</script>
+                                       <script>
+                                               var resultText;
+
+                                               require(
+                                                       &#x7B;
+                                                               "baseUrl":"/"
+                                                       &#x7D;,
+                                                       [ 
"src/javascript/scxml/cgf/SCXMLCompiler",
+                                                               
"xml!{modulePathToXMLTest}"],
+                                                       
function(compiler,KitchenSink_executableContent)&#x7B;
+                                                               var compileLog 
= true;
+
+                                                               
compiler.compile(&#x7B;
+                                                                       
inFiles:[KitchenSink_executableContent],
+                                                                       
backend:"{backendName}",
+                                                                       
beautify:true,
+                                                                       
verbose:false,
+                                                                       
log:compileLog,
+                                                                       
ie:{isIE}
+                                                               &#x7D;, 
function(scArr)&#x7B;
+                                                                       var 
transformedJs = scArr[0];
+
+                                                                       
console.log(transformedJs);
+
+                                                                       //eval
+                                                                       
eval(transformedJs);
+                                                                       
window.StatechartExecutionContext = StatechartExecutionContext;
+                                                                       
dojo.require("doh.runner"); 
+                                                                       
doh.run();
+                                                               &#x7D;);
+                                                       &#x7D;
+                                               );
+
+                                       </script>
+                               </head>
+                               <body>
+                               </body>
+                               </html>
+                       }
 
 
 


Reply via email to