mirror of
https://github.com/atom/atom.git
synced 2026-01-13 00:47:58 -05:00
76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
const path = require('path');
|
|
const fs = require('fs-plus');
|
|
const temp = require('temp').track();
|
|
|
|
describe('GitDiff when targeting nested repository', () => {
|
|
let editor, editorElement, projectPath, screenUpdates;
|
|
|
|
beforeEach(() => {
|
|
screenUpdates = 0;
|
|
spyOn(window, 'requestAnimationFrame').andCallFake(fn => {
|
|
fn();
|
|
screenUpdates++;
|
|
});
|
|
spyOn(window, 'cancelAnimationFrame').andCallFake(i => null);
|
|
|
|
projectPath = temp.mkdirSync('git-diff-spec-');
|
|
|
|
fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), projectPath);
|
|
fs.moveSync(
|
|
path.join(projectPath, 'git.git'),
|
|
path.join(projectPath, '.git')
|
|
);
|
|
|
|
// The nested repo doesn't need to be managed by the temp module because
|
|
// it's a part of our test environment.
|
|
const nestedPath = path.join(projectPath, 'nested-repository');
|
|
// Initialize the repository contents.
|
|
fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), nestedPath);
|
|
fs.moveSync(
|
|
path.join(nestedPath, 'git.git'),
|
|
path.join(nestedPath, '.git')
|
|
);
|
|
|
|
atom.project.setPaths([projectPath]);
|
|
|
|
jasmine.attachToDOM(atom.workspace.getElement());
|
|
|
|
waitsForPromise(async () => {
|
|
await atom.workspace.open(path.join(nestedPath, 'sample.js'));
|
|
await atom.packages.activatePackage('git-diff');
|
|
});
|
|
|
|
runs(() => {
|
|
editor = atom.workspace.getActiveTextEditor();
|
|
editorElement = atom.views.getView(editor);
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
temp.cleanup();
|
|
});
|
|
|
|
describe('When git-diff targets a file in a nested git-repository', () => {
|
|
/***
|
|
* Non-hack regression prevention for nested repositories. If we know
|
|
* that our project path contains two repositories, we can ensure that
|
|
* git-diff is targeting the correct one by creating an artificial change
|
|
* in the ancestor repository, which is percieved differently within the
|
|
* child. In this case, creating a new file will not generate markers in
|
|
* the ancestor repo, even if there are changes; but changes will be
|
|
* marked within the child repo. So all we have to do is check if
|
|
* markers exist and we know we're targeting the proper repository,
|
|
* If no markers exist, we're targeting an ancestor repo.
|
|
*/
|
|
it('uses the innermost repository', () => {
|
|
editor.insertText('a');
|
|
waitsFor(() => screenUpdates > 0);
|
|
runs(() => {
|
|
expect(
|
|
editorElement.querySelectorAll('.git-line-modified').length
|
|
).toBe(1);
|
|
});
|
|
});
|
|
});
|
|
});
|