75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
let mockfs = require('mock-fs');
 | 
						|
import fs = require('fs');
 | 
						|
import path = require('path');
 | 
						|
import {TreeDiffer} from './tree-differ';
 | 
						|
import {DiffingFlatten} from './broccoli-flatten';
 | 
						|
 | 
						|
describe('Flatten', () => {
 | 
						|
  afterEach(() => mockfs.restore());
 | 
						|
 | 
						|
  let flatten = (inputPaths: string) => new DiffingFlatten(inputPaths, 'output', null);
 | 
						|
  let read = (path: string) => fs.readFileSync(path, {encoding: 'utf-8'});
 | 
						|
  let rm = (path: string) => fs.unlinkSync(path);
 | 
						|
  let write =
 | 
						|
      (path: string, content: string) => { 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']);
 | 
						|
  });
 | 
						|
 | 
						|
 | 
						|
  it('should throw an exception if duplicates are found', () => {
 | 
						|
    let testDir = {
 | 
						|
      'input': {
 | 
						|
        'dir1': {
 | 
						|
          'file-1.txt': mockfs.file({content: 'file-1.txt content', mtime: new Date(1000)}),
 | 
						|
          'subdir-1':
 | 
						|
              {'file-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');
 | 
						|
    expect(() => flattenedTree.rebuild(differ.diffTree()))
 | 
						|
        .toThrowError(
 | 
						|
            'Duplicate file \'file-1.txt\' found in path \'dir1' + path.sep + 'subdir-1' +
 | 
						|
            path.sep + 'file-1.txt\'');
 | 
						|
  });
 | 
						|
});
 |