mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-25 15:38:33 +02:00
one more test
This commit is contained in:
parent
219c36054f
commit
debd5f9fed
11 changed files with 92 additions and 26 deletions
|
@ -7313,8 +7313,8 @@ GitEngine.prototype.printAndCopyTree = function() {
|
|||
};
|
||||
|
||||
GitEngine.prototype.loadTree = function(tree) {
|
||||
// deep copy in case we use it a bunch
|
||||
tree = $.extend(true, {}, tree);
|
||||
// deep copy in case we use it a bunch. lol awesome copy method
|
||||
tree = JSON.parse(JSON.stringify(tree));
|
||||
|
||||
// first clear everything
|
||||
this.removeAll();
|
||||
|
@ -23877,8 +23877,8 @@ GitEngine.prototype.printAndCopyTree = function() {
|
|||
};
|
||||
|
||||
GitEngine.prototype.loadTree = function(tree) {
|
||||
// deep copy in case we use it a bunch
|
||||
tree = $.extend(true, {}, tree);
|
||||
// deep copy in case we use it a bunch. lol awesome copy method
|
||||
tree = JSON.parse(JSON.stringify(tree));
|
||||
|
||||
// first clear everything
|
||||
this.removeAll();
|
||||
|
@ -29405,6 +29405,7 @@ var toGlobalize = {
|
|||
Markdown: require('markdown'),
|
||||
LevelDropdownView: require('../views/levelDropdownView'),
|
||||
BuilderViews: require('../views/builderViews'),
|
||||
LevelArbiter: require('../level/arbiter'),
|
||||
Intl: require('../intl')
|
||||
};
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
build/bundle.min.fe16b80c.js
Normal file
1
build/bundle.min.fe16b80c.js
Normal file
File diff suppressed because one or more lines are too long
2
build/bundle.min.js
vendored
2
build/bundle.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -434,7 +434,7 @@
|
|||
For a much easier time perusing the source, see the individual files at:
|
||||
https://github.com/pcottle/learnGitBranching
|
||||
-->
|
||||
<script src="build/bundle.min.6f4e59f1.js"></script>
|
||||
<script src="build/bundle.min.fe16b80c.js"></script>
|
||||
|
||||
<!-- The advantage of github pages: super-easy, simple, slick static hostic.
|
||||
The downside? No raw logs to parse for analytics, so I have to include
|
||||
|
|
|
@ -12,18 +12,6 @@ var compareAnswer = function(headless, expectedJSON) {
|
|||
return TreeCompare.compareTrees(expectedTree, actualTree);
|
||||
};
|
||||
|
||||
var compareAnswerExpect = function(headless, expectedJSON) {
|
||||
var equal = compareAnswer(headless, expectedJSON);
|
||||
if (!equal) {
|
||||
var expectedTree = loadTree(expectedJSON);
|
||||
var actualTree = headless.gitEngine.exportTree();
|
||||
console.log('expected Tree', expectedTree);
|
||||
console.log('actual Tree', actualTree);
|
||||
console.log('~~~~~~~~~~~~~~~~~~~~~');
|
||||
}
|
||||
expect(equal).toBe(true);
|
||||
};
|
||||
|
||||
var expectTreeAsync = function(command, expectedJSON) {
|
||||
var headless = new HeadlessGit();
|
||||
runs(function() {
|
||||
|
@ -125,5 +113,24 @@ describe('GitEngine', function() {
|
|||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22master%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22bugFix%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22master%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
);
|
||||
});
|
||||
|
||||
it('solves merging level', function() {
|
||||
expectTreeAsync(
|
||||
'git checkout -b bugFix;git commit;git checkout master;git commit;git merge bugFix',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('solves rebase level', function() {
|
||||
expectTreeAsync(
|
||||
'git checkout -b bugFix;git commit;git checkout master;git commit;git checkout bugFix;git rebase master',
|
||||
'{"branches":{"master":{"target":"C1","id":"master"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"master","id":"HEAD"}}'
|
||||
);
|
||||
});
|
||||
|
||||
it('does a whole bunch of crazy merging', function() {
|
||||
"gc;go -b side C1;gc;git merge master;go -b bug master;gc;go -b wut C3;git rebase bug;go side;git rebase wut;gc;git rebase wut;git merge C4;go master;git rebase side;go C6;git merge C3';gb -f wut C8;go bug;git rebase wut",
|
||||
'%7B%22branches%22%3A%7B%22master%22%3A%7B%22target%22%3A%22C7%22%2C%22id%22%3A%22master%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C7%22%2C%22id%22%3A%22side%22%7D%2C%22bug%22%3A%7B%22target%22%3A%22C8%22%2C%22id%22%3A%22bug%22%7D%2C%22wut%22%3A%7B%22target%22%3A%22C8%22%2C%22id%22%3A%22wut%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C2%22%2C%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C5%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C6%22%7D%2C%22C6%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C6%27%22%7D%2C%22C7%22%3A%7B%22parents%22%3A%5B%22C4%22%2C%22C6%27%22%5D%2C%22id%22%3A%22C7%22%7D%2C%22C8%22%3A%7B%22parents%22%3A%5B%22C3%27%22%2C%22C6%22%5D%2C%22id%22%3A%22C8%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22bug%22%2C%22id%22%3A%22HEAD%22%7D%7D'
|
||||
});
|
||||
});
|
||||
|
||||
|
|
58
spec/levels.spec.js
Normal file
58
spec/levels.spec.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
var HeadlessGit = require('../src/js/git/headless').HeadlessGit;
|
||||
var TreeCompare = require('../src/js/git/treeCompare').TreeCompare;
|
||||
|
||||
var _ = require('underscore');
|
||||
|
||||
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 > 700) {
|
||||
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', 750);
|
||||
};
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -183,8 +183,8 @@ GitEngine.prototype.printAndCopyTree = function() {
|
|||
};
|
||||
|
||||
GitEngine.prototype.loadTree = function(tree) {
|
||||
// deep copy in case we use it a bunch
|
||||
tree = $.extend(true, {}, tree);
|
||||
// deep copy in case we use it a bunch. lol awesome copy method
|
||||
tree = JSON.parse(JSON.stringify(tree));
|
||||
|
||||
// first clear everything
|
||||
this.removeAll();
|
||||
|
|
|
@ -24,6 +24,7 @@ var toGlobalize = {
|
|||
Markdown: require('markdown'),
|
||||
LevelDropdownView: require('../views/levelDropdownView'),
|
||||
BuilderViews: require('../views/builderViews'),
|
||||
LevelArbiter: require('../level/arbiter'),
|
||||
Intl: require('../intl')
|
||||
};
|
||||
|
||||
|
|
8
todo.txt
8
todo.txt
|
@ -4,10 +4,6 @@ Mega Things
|
|||
|
||||
Before everything else:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
[ ] increase test coverage over everything
|
||||
- unit and integration, but mostly for git operations
|
||||
[ ] green refactor tree compare to have map
|
||||
[ ] figure out gh-pages force
|
||||
|
||||
Intl TODO
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -54,6 +50,10 @@ Ideas for cleaning
|
|||
Done things:
|
||||
(I only started this on Dec 17th 2012 to get a better sense of what was done)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
[x] green refactor tree compare to have map
|
||||
[x] increase test coverage over everything
|
||||
- unit and integration, but mostly for git operations
|
||||
[x] figure out gh-pages force
|
||||
[x] add visuals and text to show compare method
|
||||
[x] green refactor tree compare to have map
|
||||
[x] fix tests by stubbing out animation factory to resolve promises
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue