
Once we add support for addedPaths then this implementation will be significantly faster than the original. In the meantime we benefit from having stable output directory which solves issues with certain files disappearing during rebuild of a tree that contains flatten and mergeTree plugins. Closes #2418
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
/// <reference path="../typings/node/node.d.ts" />
|
|
/// <reference path="../typings/jasmine/jasmine.d.ts" />
|
|
|
|
let mockfs = require('mock-fs');
|
|
import fs = require('fs');
|
|
import {TreeDiffer} from './tree-differ';
|
|
import {DiffingFlatten} from './broccoli-flatten';
|
|
|
|
describe('Flatten', () => {
|
|
afterEach(() => mockfs.restore());
|
|
|
|
function flatten(inputPaths) {
|
|
return new DiffingFlatten(inputPaths, 'output', null);
|
|
}
|
|
|
|
function read(path) { return fs.readFileSync(path, {encoding: "utf-8"}); }
|
|
function rm(path) { return fs.unlinkSync(path); }
|
|
function write(path, content) { fs.writeFileSync(path, content, {encoding: "utf-8"}); }
|
|
|
|
|
|
it('should flatten files and be incremental', () => {
|
|
let testDir = {
|
|
'input': {
|
|
'dir1': {
|
|
'file-1.txt': mockfs.file({content: 'file-1.txt content', mtime: new Date(1000)}),
|
|
'file-2.txt': mockfs.file({content: 'file-2.txt content', mtime: new Date(1000)}),
|
|
'subdir-1': {
|
|
'file-1.1.txt': mockfs.file({content: 'file-1.1.txt content', mtime: new Date(1000)})
|
|
},
|
|
'empty-dir': {}
|
|
},
|
|
},
|
|
'output': {}
|
|
};
|
|
mockfs(testDir);
|
|
|
|
let differ = new TreeDiffer('testLabel', 'input');
|
|
let flattenedTree = flatten('input');
|
|
flattenedTree.rebuild(differ.diffTree());
|
|
|
|
expect(fs.readdirSync('output')).toEqual(['file-1.1.txt', 'file-1.txt', 'file-2.txt']);
|
|
// fails due to a mock-fs bug related to reading symlinks?
|
|
//expect(read('output/file-1.1.txt')).toBe('file-1.1.txt content');
|
|
|
|
|
|
// delete a file
|
|
rm('input/dir1/file-1.txt');
|
|
// add a new one
|
|
write('input/dir1/file-3.txt', 'file-3.txt content');
|
|
|
|
flattenedTree.rebuild(differ.diffTree());
|
|
|
|
expect(fs.readdirSync('output')).toEqual(['file-1.1.txt', 'file-2.txt', 'file-3.txt']);
|
|
});
|
|
});
|