pcottle.learnGitBranching/spec/levels.spec.js
2013-07-27 22:46:46 -07:00

59 lines
1.6 KiB
JavaScript

var HeadlessGit = require('../src/js/git/headless').HeadlessGit;
var TreeCompare = require('../src/js/git/treeCompare').TreeCompare;
var _ = require('underscore');
var TIME = 150;
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 = Date.now();
runs(function() {
headless.sendCommand(command);
});
waitsFor(function() {
var diff = (Date.now() - start);
if (diff > TIME - 50) {
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() {
it('solves levels', function() {
var sequences = require('../src/levels/index').levelSequences;
_.each(Object.keys(sequences), function(sequenceKey) {
var levels = sequences[sequenceKey];
_.each(levels, function(levelBlob) {
expectLevelSolved(levelBlob);
});
});
});
});