From 111312b3b03119d19e6868ce87f9ed7ca24dd664 Mon Sep 17 00:00:00 2001 From: Vitaly Puzrin Date: Thu, 6 Nov 2014 10:02:59 +0300 Subject: [PATCH] Added ruler tests --- test/ruler.js | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 test/ruler.js diff --git a/test/ruler.js b/test/ruler.js new file mode 100644 index 0000000..72eb0f4 --- /dev/null +++ b/test/ruler.js @@ -0,0 +1,135 @@ +/*global describe, it*/ +'use strict'; + + +var assert = require('assert'); +var Ruler = require('../lib/ruler'); + +describe('Ruler', function () { + + it('should replace rule (.at)', function () { + var ruler = new Ruler(); + var res = 0; + + ruler.push('test', function foo() { res = 1; }); + ruler.at('test', function bar() { res = 2; }); + + var rules = ruler.getRules(''); + + assert.strictEqual(rules.length, 1); + rules[0](); + assert.strictEqual(res, 2); + }); + + + it('should inject before/after rule', function () { + var ruler = new Ruler(); + var res = 0; + + ruler.push('test', function foo() { res = 1; }); + ruler.before('test', 'before_test', function fooBefore() { res = -10; }); + ruler.after('test', 'after_test', function fooAfter() { res = 10; }); + + var rules = ruler.getRules(''); + + assert.strictEqual(rules.length, 3); + rules[0](); + assert.strictEqual(res, -10); + rules[1](); + assert.strictEqual(res, 1); + rules[2](); + assert.strictEqual(res, 10); + }); + + + it('should enable/disable rule', function () { + var rules, ruler = new Ruler(); + + ruler.push('test', function foo() {}); + ruler.push('test2', function bar() {}); + + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 2); + + ruler.disable('test'); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 1); + ruler.disable('test2'); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 0); + + ruler.enable('test'); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 1); + ruler.enable('test2'); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 2); + }); + + + it('should enable/disable multiple rule', function () { + var rules, ruler = new Ruler(); + + ruler.push('test', function foo() {}); + ruler.push('test2', function bar() {}); + + ruler.disable([ 'test', 'test2' ]); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 0); + ruler.enable([ 'test', 'test2' ]); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 2); + }); + + + it('should enable rules by whitelist', function () { + var rules, ruler = new Ruler(); + + ruler.push('test', function foo() {}); + ruler.push('test2', function bar() {}); + + ruler.enable('test', true); + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 1); + }); + + + it('should support multiple chains', function () { + var rules, ruler = new Ruler(); + + ruler.push('test', function foo() {}); + ruler.push('test2', function bar() {}, { alt: [ 'alt1' ] }); + ruler.push('test2', function bar() {}, { alt: [ 'alt1', 'alt2' ] }); + + rules = ruler.getRules(''); + assert.strictEqual(rules.length, 3); + rules = ruler.getRules('alt1'); + assert.strictEqual(rules.length, 2); + rules = ruler.getRules('alt2'); + assert.strictEqual(rules.length, 1); + }); + + + it('should fail on invalid rule name', function () { + var ruler = new Ruler(); + + ruler.push('test', function foo() {}); + + assert.throws(function () { + ruler.at('invalid name', function bar() {}); + }); + assert.throws(function () { + ruler.before('invalid name', function bar() {}); + }); + assert.throws(function () { + ruler.after('invalid name', function bar() {}); + }); + assert.throws(function () { + ruler.enable('invalid name'); + }); + assert.throws(function () { + ruler.disable('invalid name'); + }); + }); + +});