refactored to base compare

This commit is contained in:
Peter Cottle 2013-08-04 12:55:49 -07:00
parent fbb0da00f4
commit 7db6f0d38c
6 changed files with 82 additions and 93 deletions

View file

@ -1,10 +1,85 @@
var TreeCompare = require('../src/js/git/treeCompare').TreeCompare;
var HeadlessGit = require('../src/js/git/headless').HeadlessGit;
var loadTree = function(json) { var loadTree = function(json) {
return JSON.parse(unescape(json)); return JSON.parse(unescape(json));
}; };
var compareLevelTree = function(headless, levelBlob) {
var actualTree = headless.gitEngine.exportTree();
return TreeCompare.dispatchFromLevel(levelBlob, actualTree);
};
var compareAnswer = function(headless, expectedJSON) {
var expectedTree = loadTree(expectedJSON);
var actualTree = headless.gitEngine.exportTree();
return TreeCompare.compareTrees(expectedTree, actualTree);
};
var expectLevelAsync = function(headless, levelBlob) {
var command = levelBlob.solutionCommand;
if (command.indexOf('git rebase -i') !== -1) {
// dont do interactive rebase levels
return;
}
var start;
runs(function() {
start = Date.now();
headless.sendCommand(command);
});
waitsFor(function() {
var diff = (Date.now() - start);
if (diff > TIME - 10) {
console.log('not going to match', command);
}
var result = compareLevelTree(headless, levelBlob);
if (result) {
console.log('solved level ' + levelBlob.name.en_US);
}
return result;
}, 'trees should be equal', TIME);
};
var expectTreeAsync = function(command, expectedJSON) {
var headless = new HeadlessGit();
var start = Date.now();
var haveReported = false;
runs(function() {
headless.sendCommand(command);
});
waitsFor(function() {
var diff = (Date.now() - start);
if (diff > TIME - 50 && !haveReported) {
haveReported = true;
console.log('not going to match', command);
console.log('expected\n>>>>>>>>\n', loadTree(expectedJSON));
console.log('\n<<<<<<<<<<<\nactual', headless.gitEngine.exportTree());
}
return compareAnswer(headless, expectedJSON);
}, 'trees should be equal', 100);
};
var expectLevelSolved = function(levelBlob) {
var headless = new HeadlessGit();
if (levelBlob.startTree) {
headless.gitEngine.loadTreeFromString(levelBlob.startTree);
}
expectLevelAsync(headless, levelBlob);
};
var TIME = 150; var TIME = 150;
// useful for throwing garbage and then expecting one commit // useful for throwing garbage and then expecting one commit
var oneCommit = '{"branches":{"master":{"target":"C2","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}'; var ONE_COMMIT_TREE = '{"branches":{"master":{"target":"C2","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}';
module.exports = {
loadTree: loadTree,
compareAnswer: compareAnswer,
TIME: TIME,
expectTreeAsync: expectTreeAsync,
expectLevelSolved: expectLevelSolved,
ONE_COMMIT_TREE: ONE_COMMIT_TREE
};

View file

@ -1,40 +1,5 @@
var HeadlessGit = require('../src/js/git/headless').HeadlessGit; var base = require('./base');
var TreeCompare = require('../src/js/git/treeCompare').TreeCompare; var expectTreeAsync = base.expectTreeAsync;
var TIME = 150;
// useful for throwing garbage and then expecting one commit
var oneCommit = '{"branches":{"master":{"target":"C2","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"}},"HEAD":{"target":"master","id":"HEAD"}}';
var loadTree = function(json) {
return JSON.parse(unescape(json));
};
var compareAnswer = function(headless, expectedJSON) {
var expectedTree = loadTree(expectedJSON);
var actualTree = headless.gitEngine.exportTree();
return TreeCompare.compareTrees(expectedTree, actualTree);
};
var expectTreeAsync = function(command, expectedJSON) {
var headless = new HeadlessGit();
var start = Date.now();
var haveReported = false;
runs(function() {
headless.sendCommand(command);
});
waitsFor(function() {
var diff = (Date.now() - start);
if (diff > TIME - 50 && !haveReported) {
haveReported = true;
console.log('not going to match', command);
console.log('expected\n>>>>>>>>\n', loadTree(expectedJSON));
console.log('\n<<<<<<<<<<<\nactual', headless.gitEngine.exportTree());
}
return compareAnswer(headless, expectedJSON);
}, 'trees should be equal', 100);
};
describe('GitEngine', function() { describe('GitEngine', function() {
it('Commits', function() { it('Commits', function() {
@ -54,7 +19,7 @@ describe('GitEngine', function() {
it('throws with bad arg options', function() { it('throws with bad arg options', function() {
expectTreeAsync( expectTreeAsync(
'git commit foo; git commit -am -m; git commit -am -a; git commit -am "hi" "ho"; git commit', 'git commit foo; git commit -am -m; git commit -am -a; git commit -am "hi" "ho"; git commit',
oneCommit base.ONE_COMMIT_TREE
); );
}); });
@ -68,7 +33,7 @@ describe('GitEngine', function() {
it('does add', function() { it('does add', function() {
expectTreeAsync( expectTreeAsync(
'git add; git commit', 'git add; git commit',
oneCommit base.ONE_COMMIT_TREE
); );
}); });

View file

@ -1,50 +1,5 @@
var HeadlessGit = require('../src/js/git/headless').HeadlessGit;
var TreeCompare = require('../src/js/git/treeCompare').TreeCompare;
var _ = require('underscore'); var _ = require('underscore');
var TIME = 150; var base = require('./base');
var loadTree = function(json) {
return JSON.parse(unescape(json));
};
var compareLevelTree = function(headless, levelBlob) {
var actualTree = headless.gitEngine.exportTree();
return TreeCompare.dispatchFromLevel(levelBlob, actualTree);
};
var expectTreeAsync = function(headless, levelBlob) {
var command = levelBlob.solutionCommand;
if (command.indexOf('git rebase -i') !== -1) {
// dont do interactive rebase levels
return;
}
var start;
runs(function() {
start = Date.now();
headless.sendCommand(command);
});
waitsFor(function() {
var diff = (Date.now() - start);
if (diff > TIME - 10) {
console.log('not going to match', command);
}
var result = compareLevelTree(headless, levelBlob);
if (result) {
console.log('solved level ' + levelBlob.name.en_US);
}
return result;
}, 'trees should be equal', TIME);
};
var expectLevelSolved = function(levelBlob) {
var headless = new HeadlessGit();
if (levelBlob.startTree) {
headless.gitEngine.loadTreeFromString(levelBlob.startTree);
}
expectTreeAsync(headless, levelBlob);
};
describe('GitEngine Levels', function() { describe('GitEngine Levels', function() {
it('solves levels', function() { it('solves levels', function() {
@ -52,7 +7,7 @@ describe('GitEngine Levels', function() {
_.each(Object.keys(sequences), function(sequenceKey) { _.each(Object.keys(sequences), function(sequenceKey) {
var levels = sequences[sequenceKey]; var levels = sequences[sequenceKey];
_.each(levels, function(levelBlob) { _.each(levels, function(levelBlob) {
expectLevelSolved(levelBlob); base.expectLevelSolved(levelBlob);
}); });
}); });
}); });

View file

@ -1,10 +1,6 @@
var TreeCompare = require('../src/js/git/treeCompare').TreeCompare; var TreeCompare = require('../src/js/git/treeCompare').TreeCompare;
var _ = require('underscore'); var _ = require('underscore');
var loadTree = function(json) {
return JSON.parse(unescape(json));
};
var loadTree = function(treeString) { var loadTree = function(treeString) {
return TreeCompare.convertTreeSafe(treeString); return TreeCompare.convertTreeSafe(treeString);
}; };

View file

@ -121,7 +121,6 @@ var initRootEvents = function(eventBaton) {
var initDemo = function(sandbox) { var initDemo = function(sandbox) {
var params = util.parseQueryString(window.location.href); var params = util.parseQueryString(window.location.href);
console.log(params);
// being the smart programmer I am (not), I dont include a true value on demo, so // being the smart programmer I am (not), I dont include a true value on demo, so
// I have to check if the key exists here // I have to check if the key exists here

View file

@ -425,7 +425,6 @@ var commandConfig = {
return; return;
} }
console.log(generalArgs);
command.validateArgBounds(generalArgs, 1, 1); command.validateArgBounds(generalArgs, 1, 1);
engine.checkout(engine.crappyUnescape(generalArgs[0])); engine.checkout(engine.crappyUnescape(generalArgs[0]));