Browse Source

Add unit files to lint, fix lint errors.

Brendan Dahl 14 years ago
parent
commit
971f35d165
  1. 2
      Makefile
  2. 19
      src/function.js
  3. 211
      test/unit/function_spec.js
  4. 8
      test/unit/obj_spec.js

2
Makefile

@ -129,7 +129,7 @@ browser-test:
# #
# <http://code.google.com/closure/utilities/docs/linter_howto.html> # <http://code.google.com/closure/utilities/docs/linter_howto.html>
SRC_DIRS := . src utils web test examples/helloworld extensions/firefox \ SRC_DIRS := . src utils web test examples/helloworld extensions/firefox \
extensions/firefox/components extensions/chrome extensions/firefox/components extensions/chrome test/unit
GJSLINT_FILES = $(foreach DIR,$(SRC_DIRS),$(wildcard $(DIR)/*.js)) GJSLINT_FILES = $(foreach DIR,$(SRC_DIRS),$(wildcard $(DIR)/*.js))
lint: lint:
gjslint --nojsdoc $(GJSLINT_FILES) gjslint --nojsdoc $(GJSLINT_FILES)

19
src/function.js

@ -336,15 +336,16 @@ var PDFFunction = (function PDFFunctionClosure() {
}; };
}, },
constructPostScript: function pdfFunctionConstructPostScript(fn, dict, xref) { constructPostScript: function pdfFunctionConstructPostScript(fn, dict,
xref) {
var domain = dict.get('Domain'); var domain = dict.get('Domain');
var range = dict.get('Range'); var range = dict.get('Range');
if (!domain) if (!domain)
error('No domain.'); error('No domain.');
if(!range) if (!range)
error('No range.') error('No range.');
var lexer = new PostScriptLexer(fn); var lexer = new PostScriptLexer(fn);
var parser = new PostScriptParser(lexer); var parser = new PostScriptParser(lexer);
@ -399,7 +400,7 @@ var FunctionCache = (function FunctionCache() {
} }
FunctionCache.prototype = { FunctionCache.prototype = {
has: function(key) { has: function(key) {
return key in this.cache return key in this.cache;
}, },
get: function(key) { get: function(key) {
return this.cache[key]; return this.cache[key];
@ -446,8 +447,8 @@ var PostScriptStack = (function PostScriptStack() {
// algorithm from http://jsfromhell.com/array/rotate // algorithm from http://jsfromhell.com/array/rotate
var l = a.length, p = (Math.abs(p) >= l && (p %= l), var l = a.length, p = (Math.abs(p) >= l && (p %= l),
p < 0 && (p += l), p), i, x; p < 0 && (p += l), p), i, x;
for(; p; p = (Math.ceil(l / p) - 1) * p - l + (l = p)) for (; p; p = (Math.ceil(l / p) - 1) * p - l + (l = p))
for(i = l; i > p; x = a[--i], a[i] = a[i - p], a[i - p] = x); for (i = l; i > p; x = a[--i], a[i] = a[i - p], a[i - p] = x);
this.stack = this.stack.concat(a); this.stack = this.stack.concat(a);
} }
}; };
@ -677,12 +678,12 @@ var PostScriptEvaluator = (function PostScriptEvaluator() {
break; break;
default: default:
error('Unknown operator ' + operator); error('Unknown operator ' + operator);
break break;
} }
} }
return stack.stack; return stack.stack;
} }
} };
return PostScriptEvaluator; return PostScriptEvaluator;
})(); })();
@ -741,7 +742,7 @@ var PostScriptParser = (function PostScriptParser() {
// The true block is right after the 'if' so it just falls through on // The true block is right after the 'if' so it just falls through on
// true else it jumps and skips the true block. // true else it jumps and skips the true block.
condition.push('jz', this.code.length); condition.push('jz', this.code.length);
} else if(this.accept(PostScriptTokenTypes.LBRACE)) { } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
var jump = []; var jump = [];
this.code.push(jump); this.code.push(jump);
var endOfTrue = this.code.length; var endOfTrue = this.code.length;

211
test/unit/function_spec.js

@ -4,37 +4,37 @@
'use strict'; 'use strict';
describe('function', function() { describe('function', function() {
beforeEach(function () { beforeEach(function() {
this.addMatchers({ this.addMatchers({
toMatchArray: function(expected) { toMatchArray: function(expected) {
var actual = this.actual; var actual = this.actual;
if (actual.length != expected.length) if (actual.length != expected.length)
return false; return false;
for (var i = 0; i < expected.length; i++) { for (var i = 0; i < expected.length; i++) {
var a = actual[i], b = expected[i]; var a = actual[i], b = expected[i];
if (isArray(b)) { if (isArray(b)) {
if (a.length != b.length) if (a.length != b.length)
return false; return false;
for (var j = 0; j < a.length; j++) { for (var j = 0; j < a.length; j++) {
var suba = a[j], subb = b[j]; var suba = a[j], subb = b[j];
if (suba !== subb) if (suba !== subb)
return false return false;
} }
} else { } else {
if (a !== b) if (a !== b)
return false; return false;
} }
} }
return true; return true;
} }
}); });
}); });
describe('PostScriptParser', function() { describe('PostScriptParser', function() {
function parse(program) { function parse(program) {
var stream = new StringStream(program); var stream = new StringStream(program);
var parser = new PostScriptParser(new PostScriptLexer(stream)); var parser = new PostScriptParser(new PostScriptLexer(stream));
return parser.parse(); return parser.parse();
} }
it('parses empty programs', function() { it('parses empty programs', function() {
var output = parse('{}'); var output = parse('{}');
@ -44,180 +44,179 @@ describe('function', function() {
var number = 999; var number = 999;
var program = parse('{ ' + number + ' }'); var program = parse('{ ' + number + ' }');
var expectedProgram = [ var expectedProgram = [
['push', number] ['push', number]
]; ];
expect(program).toMatchArray(expectedProgram); expect(program).toMatchArray(expectedProgram);
}); });
it('parses negative numbers', function() { it('parses negative numbers', function() {
var number = -999; var number = -999;
var program = parse('{ ' + number + ' }'); var program = parse('{ ' + number + ' }');
var expectedProgram = [ var expectedProgram = [
['push', number] ['push', number]
]; ];
expect(program).toMatchArray(expectedProgram); expect(program).toMatchArray(expectedProgram);
}); });
it('parses negative floats', function() { it('parses negative floats', function() {
var number = 3.3; var number = 3.3;
var program = parse('{ ' + number + ' }'); var program = parse('{ ' + number + ' }');
var expectedProgram = [ var expectedProgram = [
['push', number] ['push', number]
]; ];
expect(program).toMatchArray(expectedProgram); expect(program).toMatchArray(expectedProgram);
}); });
it('parses operators', function() { it('parses operators', function() {
var program = parse('{ sub }'); var program = parse('{ sub }');
var expectedProgram = [ var expectedProgram = [
['sub'] ['sub']
]; ];
expect(program).toMatchArray(expectedProgram); expect(program).toMatchArray(expectedProgram);
}); });
it('parses if statements', function() { it('parses if statements', function() {
var program = parse('{ { 99 } if }'); var program = parse('{ { 99 } if }');
var expectedProgram = [ var expectedProgram = [
['jz', 2], ['jz', 2],
['push', 99] ['push', 99]
]; ];
expect(program).toMatchArray(expectedProgram); expect(program).toMatchArray(expectedProgram);
}); });
it('parses ifelse statements', function() { it('parses ifelse statements', function() {
var program = parse('{ { 99 } { 44 } ifelse }'); var program = parse('{ { 99 } { 44 } ifelse }');
var expectedProgram = [ var expectedProgram = [
['jz', 3], ['jz', 3],
['push', 99], ['push', 99],
['j', 4], ['j', 4],
['push', 44], ['push', 44]
]; ];
expect(program).toMatchArray(expectedProgram); expect(program).toMatchArray(expectedProgram);
}); });
it('handles missing brackets', function() { it('handles missing brackets', function() {
expect(function() { parse('{'); }).toThrow( expect(function() { parse('{'); }).toThrow(
new Error('Unexpected symbol: found undefined expected 1.')); new Error('Unexpected symbol: found undefined expected 1.'));
}); });
}); });
describe('PostScriptEvaluator', function() { describe('PostScriptEvaluator', function() {
function evaluate(program) { function evaluate(program) {
var stream = new StringStream(program); var stream = new StringStream(program);
var parser = new PostScriptParser(new PostScriptLexer(stream)); var parser = new PostScriptParser(new PostScriptLexer(stream));
var code = parser.parse(); var code = parser.parse();
var evaluator = new PostScriptEvaluator(code); var evaluator = new PostScriptEvaluator(code);
var output = evaluator.execute(); var output = evaluator.execute();
console.log(output); return output;
return output;
} }
it('pushes stack', function() { it('pushes stack', function() {
var stack = evaluate('{ 99 }'); var stack = evaluate('{ 99 }');
var expectedStack = [99]; var expectedStack = [99];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('handles if with true', function() { it('handles if with true', function() {
var stack = evaluate('{ 1 {99} if }'); var stack = evaluate('{ 1 {99} if }');
var expectedStack = [99]; var expectedStack = [99];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('handles if with false', function() { it('handles if with false', function() {
var stack = evaluate('{ 0 {99} if }'); var stack = evaluate('{ 0 {99} if }');
var expectedStack = []; var expectedStack = [];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('handles ifelse with true', function() { it('handles ifelse with true', function() {
var stack = evaluate('{ 1 {99} {77} ifelse }'); var stack = evaluate('{ 1 {99} {77} ifelse }');
var expectedStack = [99]; var expectedStack = [99];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('handles ifelse with false', function() { it('handles ifelse with false', function() {
var stack = evaluate('{ 0 {99} {77} ifelse }'); var stack = evaluate('{ 0 {99} {77} ifelse }');
var expectedStack = [77]; var expectedStack = [77];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('handles nested if', function() { it('handles nested if', function() {
var stack = evaluate('{ 1 {1 {77} if} if }'); var stack = evaluate('{ 1 {1 {77} if} if }');
var expectedStack = [77]; var expectedStack = [77];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('abs', function() { it('abs', function() {
var stack = evaluate('{ -2 abs }'); var stack = evaluate('{ -2 abs }');
var expectedStack = [2]; var expectedStack = [2];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('adds', function() { it('adds', function() {
var stack = evaluate('{ 1 2 add }'); var stack = evaluate('{ 1 2 add }');
var expectedStack = [3]; var expectedStack = [3];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('boolean ands', function() { it('boolean ands', function() {
var stack = evaluate('{ true false and }'); var stack = evaluate('{ true false and }');
var expectedStack = [false]; var expectedStack = [false];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('bitwise ands', function() { it('bitwise ands', function() {
var stack = evaluate('{ 254 1 and }'); var stack = evaluate('{ 254 1 and }');
var expectedStack = [254 & 1]; var expectedStack = [254 & 1];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
// TODO atan // TODO atan
// TODO bitshift // TODO bitshift
// TODO ceiling // TODO ceiling
// TODO copy // TODO copy
// TODO cos // TODO cos
// TODO cvi // TODO cvi
// TODO cvr // TODO cvr
// TODO div // TODO div
it('duplicates', function() { it('duplicates', function() {
var stack = evaluate('{ 99 dup }'); var stack = evaluate('{ 99 dup }');
var expectedStack = [99, 99]; var expectedStack = [99, 99];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
// TODO eq // TODO eq
it('exchanges', function() { it('exchanges', function() {
var stack = evaluate('{ 44 99 exch }'); var stack = evaluate('{ 44 99 exch }');
var expectedStack = [99, 44]; var expectedStack = [99, 44];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
// TODO exp // TODO exp
// TODO false // TODO false
// TODO floor // TODO floor
// TODO ge // TODO ge
// TODO gt // TODO gt
// TODO idiv // TODO idiv
it('duplicates index', function() { it('duplicates index', function() {
var stack = evaluate('{ 4 3 2 1 2 index }'); var stack = evaluate('{ 4 3 2 1 2 index }');
var expectedStack = [4, 3, 2, 1, 3]; var expectedStack = [4, 3, 2, 1, 3];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
// TODO le // TODO le
// TODO ln // TODO ln
// TODO log // TODO log
// TODO lt // TODO lt
// TODO mod // TODO mod
// TODO mul // TODO mul
// TODO ne // TODO ne
// TODO neg // TODO neg
// TODO not // TODO not
// TODO or // TODO or
it('pops stack', function() { it('pops stack', function() {
var stack = evaluate('{ 1 2 pop }'); var stack = evaluate('{ 1 2 pop }');
var expectedStack = [1]; var expectedStack = [1];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('rolls stack right', function() { it('rolls stack right', function() {
var stack = evaluate('{ 1 3 2 2 4 1 roll }'); var stack = evaluate('{ 1 3 2 2 4 1 roll }');
var expectedStack = [2, 1, 3, 2]; var expectedStack = [2, 1, 3, 2];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
it('rolls stack left', function() { it('rolls stack left', function() {
var stack = evaluate('{ 1 3 2 2 4 -1 roll }'); var stack = evaluate('{ 1 3 2 2 4 -1 roll }');
var expectedStack = [3, 2, 2, 1]; var expectedStack = [3, 2, 2, 1];
expect(stack).toMatchArray(expectedStack); expect(stack).toMatchArray(expectedStack);
}); });
// TODO round // TODO round
// TODO sin // TODO sin
// TODO sqrt // TODO sqrt
// TODO sub // TODO sub
// TODO true // TODO true
// TODO truncate // TODO truncate
// TODO xor // TODO xor
}); });
}); });

8
test/unit/obj_spec.js

@ -3,11 +3,11 @@
'use strict'; 'use strict';
describe("obj", function() { describe('obj', function() {
describe("Name", function() { describe('Name', function() {
it("should retain the given name", function() { it('should retain the given name', function() {
var givenName = "Font"; var givenName = 'Font';
var name = new Name(givenName); var name = new Name(givenName);
expect(name.name).toEqual(givenName); expect(name.name).toEqual(givenName);
}); });

Loading…
Cancel
Save