forked from microsoft/rushstack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskCollection.test.ts
More file actions
81 lines (70 loc) · 2.6 KB
/
TaskCollection.test.ts
File metadata and controls
81 lines (70 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { TaskCollection } from '../TaskCollection';
import { ITaskWriter } from '@rushstack/stream-collator';
import { TaskStatus } from '../TaskStatus';
import { ITaskDefinition, ITask } from '../ITask';
import { StringBufferTerminalProvider } from '@rushstack/node-core-library';
function createDummyTask(name: string, action?: () => void): ITaskDefinition {
return {
name,
isIncrementalBuildAllowed: false,
execute: (writer: ITaskWriter) => {
if (action) {
action();
}
return Promise.resolve(TaskStatus.Success);
},
hadEmptyScript: false
};
}
function checkConsoleOutput(terminalProvider: StringBufferTerminalProvider): void {
expect(terminalProvider.getOutput()).toMatchSnapshot();
expect(terminalProvider.getVerbose()).toMatchSnapshot();
expect(terminalProvider.getWarningOutput()).toMatchSnapshot();
expect(terminalProvider.getErrorOutput()).toMatchSnapshot();
}
describe('TaskCollection', () => {
let terminalProvider: StringBufferTerminalProvider;
let taskCollection: TaskCollection;
beforeEach(() => {
terminalProvider = new StringBufferTerminalProvider(true);
});
describe('Dependencies', () => {
beforeEach(() => {
taskCollection = new TaskCollection({
quietMode: false
});
});
it('throwsErrorOnNonExistentTask', () => {
expect(() => taskCollection.addDependencies('foo', []))
.toThrowErrorMatchingSnapshot();
});
it('throwsErrorOnNonExistentDependency', () => {
taskCollection.addTask(createDummyTask('foo'));
expect(() => taskCollection.addDependencies('foo', ['bar']))
.toThrowErrorMatchingSnapshot();
});
it('detectsDependencyCycle', () => {
taskCollection.addTask(createDummyTask('foo'));
taskCollection.addTask(createDummyTask('bar'));
taskCollection.addDependencies('foo', ['bar']);
taskCollection.addDependencies('bar', ['foo']);
expect(() => taskCollection.getOrderedTasks()).toThrowErrorMatchingSnapshot();
});
it('respectsDependencyOrder', () => {
const result: string[] = [];
taskCollection.addTask(createDummyTask('two', () => result.push('2')));
taskCollection.addTask(createDummyTask('one', () => result.push('1')));
taskCollection.addDependencies('two', ['one']);
const tasks: ITask[] = taskCollection.getOrderedTasks();
expect(tasks.map((t) => t.name).join(',')).toEqual('one,two');
checkConsoleOutput(terminalProvider);
});
});
describe('Error logging', () => {
beforeEach(() => {
taskCollection = new TaskCollection({
quietMode: false
});
});
});
});