You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2013/06/14 19:31:35 UTC

[66/83] [abbrv] git commit: updates to hooker tests.

updates to hooker tests.


Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/090377b9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/090377b9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/090377b9

Branch: refs/heads/lazy
Commit: 090377b900fb2e100d043b9b48416c8d24cd0955
Parents: 4b310a7
Author: Fil Maj <ma...@gmail.com>
Authored: Wed Jun 12 16:35:04 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Thu Jun 13 11:13:21 2013 -0700

----------------------------------------------------------------------
 spec/hooker.spec.js | 81 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 53 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/090377b9/spec/hooker.spec.js
----------------------------------------------------------------------
diff --git a/spec/hooker.spec.js b/spec/hooker.spec.js
index 6b0129a..2fe1705 100644
--- a/spec/hooker.spec.js
+++ b/spec/hooker.spec.js
@@ -16,51 +16,69 @@
     specific language governing permissions and limitations
     under the License.
 */
-var hooker = require('../../src/hooker'),
+var hooker = require('../src/hooker'),
+    util   = require('../src/util'),
     shell  = require('shelljs'),
     path   = require('path'),
     fs     = require('fs'),
     os     = require('os'),
-    tempDir= path.join(__dirname, '..', '..', 'temp'),
-    hooks  = path.join(__dirname, '..', 'fixtures', 'hooks'),
-    cordova= require('../../cordova');
+    tempDir= path.join(__dirname, '..', 'temp'),
+    hooks  = path.join(__dirname, 'fixtures', 'hooks'),
+    cordova= require('../cordova');
 
 var platform = os.platform();
 var cwd = process.cwd();
 
 describe('hooker', function() {
     it('should throw if provided directory is not a cordova project', function() {
-        shell.rm('-rf', tempDir);
-        shell.mkdir('-p', tempDir); 
-        this.after(function() {
-            shell.rm('-rf', tempDir);
-        });
-
+        spyOn(util, 'isCordova').andReturn(false);
         expect(function() {
-            var h = new hooker(tempDir);
-        }).toThrow();
+            new hooker(tempDir);
+        }).toThrow('Not a Cordova project, can\'t use hooks.');
     });
     it('should not throw if provided directory is a cordova project', function() {
-        cordova.create(tempDir);
-        this.after(function() {
-            shell.rm('-rf', tempDir);
-        });
-
+        var root = '/some/root';
+        spyOn(util, 'isCordova').andReturn(root);
         expect(function() {
             var h = new hooker(tempDir);
+            expect(h.root).toEqual(root);
         }).not.toThrow();
     });
 
-    describe('fire method', function() {
+    describe('global (static) fire method', function() {
+        it('should execute listeners serially', function(done) {
+            var timeout = 20;
+            var test_event = 'poop';
+            var h1_fired = false;
+            var h1 = function(root, cb) {
+                h1_fired = true;
+                setTimeout(cb, timeout);
+            };
+            var h2_fired = false;
+            var h2 = function() {
+                h2_fired = true;
+            };
+            runs(function() {
+                cordova.on(test_event, h1);
+                cordova.on(test_event, h2);
+                hooker.fire(test_event, function(err) {
+                    done();
+                });
+                expect(h1_fired).toBe(true);
+                expect(h2_fired).toBe(false);
+            });
+            waits(timeout);
+            runs(function() {
+                expect(h2_fired).toBe(true);
+            });
+        });
+    });
+    describe('project-level fire method', function() {
         var h;
-
         beforeEach(function() {
-            cordova.create(tempDir);
+            spyOn(util, 'isCordova').andReturn(tempDir);
             h = new hooker(tempDir);
         });
-        afterEach(function() {
-            shell.rm('-rf', tempDir);
-        });
 
         describe('failure', function() {
             it('should not error if the hook is unrecognized', function(done) {
@@ -70,12 +88,14 @@ describe('hooker', function() {
                 });
             });
             it('should error if any script exits with non-zero code', function(done) {
-                var script;
+                var script = path.join(tempDir, '.cordova', 'hooks', 'before_build');
+                shell.mkdir('-p', script);
+                this.after(function() { shell.rm('-rf', tempDir); });
                 if (platform.match(/(win32|win64)/)) {
-                    script = path.join(tempDir, '.cordova', 'hooks', 'before_build', 'fail.bat');
+                    script = path.join(script, 'fail.bat');
                     shell.cp(path.join(hooks, 'fail', 'fail.bat'), script);
                 } else {
-                    script = path.join(tempDir, '.cordova', 'hooks', 'before_build', 'fail.sh');
+                    script = path.join(script, 'fail.sh');
                     shell.cp(path.join(hooks, 'fail', 'fail.sh'), script);
                 }
                 fs.chmodSync(script, '754');
@@ -89,6 +109,8 @@ describe('hooker', function() {
         describe('success', function() {
             it('should execute all scripts in order and fire callback', function(done) {
                 var hook = path.join(tempDir, '.cordova', 'hooks', 'before_build');
+                shell.mkdir('-p', hook);
+                this.after(function() { shell.rm('-rf', tempDir); });
                 if (platform.match(/(win32|win64)/)) {
                     shell.cp(path.join(hooks, 'test', '0.bat'), hook);
                     shell.cp(path.join(hooks, 'test', '1.bat'), hook);
@@ -117,6 +139,8 @@ describe('hooker', function() {
             });
             it('should pass the project root folder as parameter into the project-level hooks', function(done) {
                 var hook = path.join(tempDir, '.cordova', 'hooks', 'before_build');
+                shell.mkdir('-p', hook);
+                this.after(function() { shell.rm('-rf', tempDir); });
                 if (platform.match(/(win32|win64)/)) {
                     shell.cp(path.join(hooks, 'test', '0.bat'), hook);
                 } else {
@@ -174,9 +198,10 @@ describe('hooker', function() {
                 });
                 it('should allow for hook to opt into asynchronous execution and block further hooks from firing using the done callback', function(done) {
                     var h1_fired = false;
+                    var timeout = 19;
                     var h1 = function(root, cb) {
                         h1_fired = true;
-                        setTimeout(cb, 100);
+                        setTimeout(cb, timeout);
                     };
                     var h2_fired = false;
                     var h2 = function() {
@@ -191,7 +216,7 @@ describe('hooker', function() {
                         expect(h1_fired).toBe(true);
                         expect(h2_fired).toBe(false);
                     });
-                    waits(100);
+                    waits(timeout);
                     runs(function() {
                         expect(h2_fired).toBe(true);
                     });