mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-26 16:08:34 +02:00
refactored to base compare
This commit is contained in:
parent
fbb0da00f4
commit
7db6f0d38c
6 changed files with 82 additions and 93 deletions
77
spec/base.js
77
spec/base.js
|
@ -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
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue