From 087cf9eeb23f7bf74f69f9f1af9e3e7f491451cf Mon Sep 17 00:00:00 2001 From: Mitar Date: Fri, 2 Dec 2016 02:35:51 -0800 Subject: [PATCH 01/14] Added tests. --- .travis.yml | 12 ++++++++++++ tools/build.sh | 9 +++++++-- tools/unit2.js | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..60a3e9b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - "6" + - "6.1" + - "4.4" + - "5.11" + - "0.10" + - "0.12" +before_script: + - npm install -g uglifyjs +script: + - ./tools/build.sh diff --git a/tools/build.sh b/tools/build.sh index fe3be4b..a209852 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -47,7 +47,8 @@ cd .. runjs=`which d8 || which jsdb || which node` echo Using $runjs $runjs ./tools/unit2.js & -echo $! > tools/nodepid.log +nodepid=$! +echo $nodepid > tools/nodepid.log cd lib rm -rf numeric-$ver @@ -78,7 +79,11 @@ rm -f numeric-$ver.tar.gz tar cfz numeric-$ver.tar.gz numeric-$ver rm -rf numeric-$ver cd ../tools -wait +set +e +wait "$nodepid" +testexit=$? +set -e rm -f buildpid.log rm -f nodepid.log echo "Build complete" +exit $testexit diff --git a/tools/unit2.js b/tools/unit2.js index 8d4223c..b05165d 100644 --- a/tools/unit2.js +++ b/tools/unit2.js @@ -76,3 +76,4 @@ for(_j=0;_j<_bar.length;_j++) { runner(_bar[_j].replace(/
/g,'').split('\nIN> '));
 }
 console.log('unit2: '+_k1+' tests, '+_unit_pass+' pass and '+_unit_fail+' fail.');
+if(typeof process !== "undefined") { process.exit(!!_unit_fail); }

From e91c5205c093f9aa79777cabe76f06f77abecc61 Mon Sep 17 00:00:00 2001
From: Mitar 
Date: Fri, 2 Dec 2016 15:13:08 -0800
Subject: [PATCH 02/14] Adding CircleCI tests.

---
 circle.yml | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 circle.yml

diff --git a/circle.yml b/circle.yml
new file mode 100644
index 0000000..1589296
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,6 @@
+dependencies:
+  override:
+    - npm install -g selenium-webdriver uglifyjs
+test:
+  override:
+    - ./tools/build.sh

From d5f815d62a3958490519b20b452240abd4f569a2 Mon Sep 17 00:00:00 2001
From: Mitar 
Date: Fri, 2 Dec 2016 17:51:18 -0800
Subject: [PATCH 03/14] Testing using Sauce Labs.

---
 circle.yml              | 22 ++++++++++++++++++++--
 tools/selenium_tests.py | 11 +++++++++--
 tools/serve.py          | 17 +++++++++++++++++
 tools/workshop_in.php   | 16 +++++++++-------
 workshop.php            | 16 +++++++++-------
 5 files changed, 64 insertions(+), 18 deletions(-)
 create mode 100755 tools/serve.py

diff --git a/circle.yml b/circle.yml
index 1589296..6bd8998 100644
--- a/circle.yml
+++ b/circle.yml
@@ -1,6 +1,24 @@
 dependencies:
-  override:
-    - npm install -g selenium-webdriver uglifyjs
+  post:
+    - npm install -g uglifyjs
+    - pip install selenium
+    - wget https://saucelabs.com/downloads/sc-latest-linux.tar.gz
+    - tar -xzf sc-latest-linux.tar.gz
 test:
   override:
+    # Build and test locally.
     - ./tools/build.sh
+    - cd sc-*-linux && ./bin/sc --user $SAUCE_USERNAME --api-key $SAUCE_ACCESS_KEY --readyfile ~/sauce_is_ready:
+        background: true
+    # Wait for tunnel to be ready.
+    - while [ ! -e ~/sauce_is_ready ]; do sleep 1; done
+    # Server files.
+    - python -m SimpleHTTPServer
+        background: true
+    # Wait for server to be ready.
+    - curl --retry 10 --retry-delay 2 -s http://localhost:8000/ > /dev/null
+    # Run selenium tests.
+    - python ./tools/selenium_tests.py Chrome http://localhost:8000/
+  post:
+    # Wait for Sauce Connect to close the tunnel.
+    - killall --wait sc
diff --git a/tools/selenium_tests.py b/tools/selenium_tests.py
index debe505..6c9c206 100644
--- a/tools/selenium_tests.py
+++ b/tools/selenium_tests.py
@@ -7,6 +7,7 @@
 import urllib
 import re
 
+# Returns True if any test failed.
 def test(name,driver):
     p = 0
     f = 0
@@ -31,9 +32,11 @@ def test(name,driver):
                 print k,"FAIL:",tests[k][0],'==>',foo,"reason:",str(ex)
                 f=f+1
         print name,'testing complete. PASS:',p,'FAIL:',f,'Total:',t
+        return bool(f)
     except:
         print "FAIL: "+name+" selenium tests. Details:"
         traceback.print_exc()
+        return True
 
 url = ""
 if len(sys.argv) > 1:
@@ -50,7 +53,8 @@ def test(name,driver):
 print 'Fetching',u0
 njs = urllib.urlopen(u0).read()
 y = re.findall(r'
[\s\S]*?(?=<\/pre>)',njs)
-tests = [];
+tests = []
+failure = True
 
 print "In-browser unit tests."
 for x in y:
@@ -66,11 +70,14 @@ def test(name,driver):
     driver.get(url+'workshop.php')
     try:
         WebDriverWait(driver, 30).until(lambda driver : driver.find_element_by_id("text_1"))
-        test(client,driver)
+        failure=test(client,driver)
     except Exception as ex:
         print "FAIL: text_1 not found. ",ex
 except Exception as ex:
     print "Could not use browser",client
     print ex
+
 if(driver):
     driver.quit()
+
+sys.exit(failure)
\ No newline at end of file
diff --git a/tools/serve.py b/tools/serve.py
new file mode 100755
index 0000000..06ac5b0
--- /dev/null
+++ b/tools/serve.py
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+import SimpleHTTPServer
+import SocketServer
+
+HOST = 'localhost'
+PORT = 8000
+
+Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
+Handler.extensions_map.update({
+    '.php': 'text/html',
+});
+
+httpd = SocketServer.TCPServer((HOST, PORT), Handler)
+
+print "Serving at", HOST, PORT
+httpd.serve_forever()
\ No newline at end of file
diff --git a/tools/workshop_in.php b/tools/workshop_in.php
index fbf2ffe..98d1121 100644
--- a/tools/workshop_in.php
+++ b/tools/workshop_in.php
@@ -23,6 +23,13 @@ function con() {
 
 WORKSHOPHTML
 
+
+
 
 
+
+
 
 
+