1 |
|
2 |
|
3 | import 'babel-polyfill'
|
4 | import path from 'path'
|
5 |
|
6 | import CopyTargetsToRoot from '../../src/Rules/CopyTargetsToRoot'
|
7 | import { initializeRule } from '../helpers'
|
8 |
|
9 | import type { RuleDefinition } from '../helpers'
|
10 |
|
11 | async function initialize ({
|
12 | RuleClass = CopyTargetsToRoot,
|
13 | filePath = 'error-warning.tex',
|
14 | parameters = [{
|
15 | filePath: 'file-types/PortableDocumentFormat.pdf'
|
16 | }],
|
17 | targets = ['file-types/PortableDocumentFormat.pdf'],
|
18 | ...rest }: RuleDefinition = {}) {
|
19 | return initializeRule({ RuleClass, filePath, parameters, targets, ...rest })
|
20 | }
|
21 |
|
22 | describe('CopyTargetsToRoot', () => {
|
23 | describe('appliesToParameters', () => {
|
24 | it('returns true if parameter is a target', async (done) => {
|
25 | const { rule, options } = await initialize({
|
26 | options: { copyTargetsToRoot: true }
|
27 | })
|
28 |
|
29 | rule.addTarget(rule.firstParameter.filePath)
|
30 | expect(await CopyTargetsToRoot.appliesToParameters(rule.state, 'build', 'execute', options, ...rule.parameters)).toBe(true)
|
31 |
|
32 | done()
|
33 | })
|
34 |
|
35 | it('returns false if parameter is a virtual file', async (done) => {
|
36 | const filePath = 'file-types/foo.bar-ParsedLaTeXLog'
|
37 | const { rule, options } = await initialize({
|
38 | options: { copyTargetsToRoot: true },
|
39 | parameters: [{ filePath }]
|
40 | })
|
41 |
|
42 | rule.addTarget(filePath)
|
43 | expect(await CopyTargetsToRoot.appliesToParameters(rule.state, 'build', 'execute', options, ...rule.parameters)).toBe(false)
|
44 |
|
45 | done()
|
46 | })
|
47 |
|
48 | it('returns false if parameter is already in the root', async (done) => {
|
49 | const filePath = 'error-warning.log'
|
50 | const { rule, options } = await initialize({
|
51 | options: { copyTargetsToRoot: true },
|
52 | parameters: [{ filePath }]
|
53 | })
|
54 |
|
55 | rule.addTarget(filePath)
|
56 | expect(await CopyTargetsToRoot.appliesToParameters(rule.state, 'build', 'execute', options, ...rule.parameters)).toBe(false)
|
57 |
|
58 | done()
|
59 | })
|
60 |
|
61 | it('returns false if parameter is not a target', async (done) => {
|
62 | const { rule, options } = await initialize({
|
63 | options: { copyTargetsToRoot: true }
|
64 | })
|
65 |
|
66 | expect(await CopyTargetsToRoot.appliesToParameters(rule.state, 'build', 'execute', options, ...rule.parameters)).toBe(false)
|
67 |
|
68 | done()
|
69 | })
|
70 |
|
71 | it('returns false if copyTargetsToRoot is not set', async (done) => {
|
72 | const { rule, options } = await initialize()
|
73 |
|
74 | rule.addTarget(rule.firstParameter.filePath)
|
75 | expect(await CopyTargetsToRoot.appliesToParameters(rule.state, 'build', 'execute', options, ...rule.parameters)).toBe(false)
|
76 |
|
77 | done()
|
78 | })
|
79 | })
|
80 |
|
81 | describe('initialize', () => {
|
82 | it('replaces input target with destination path', async (done) => {
|
83 | const { rule } = await initialize({
|
84 | options: { copyTargetsToRoot: true }
|
85 | })
|
86 |
|
87 | expect(rule.state.targets).not.toContain(rule.firstParameter.filePath)
|
88 | expect(await rule.state.targets).toContain('PortableDocumentFormat.pdf')
|
89 |
|
90 | done()
|
91 | })
|
92 | })
|
93 |
|
94 | describe('run', () => {
|
95 | it('copies target to root path.', async (done) => {
|
96 | const { rule } = await initialize({
|
97 | options: { copyTargetsToRoot: true }
|
98 | })
|
99 | const destination = path.join(rule.rootPath, 'PortableDocumentFormat.pdf')
|
100 |
|
101 | spyOn(rule.firstParameter, 'copy')
|
102 |
|
103 | expect(await rule.run()).toBe(true)
|
104 | expect(rule.firstParameter.copy).toHaveBeenCalledWith(destination)
|
105 |
|
106 | done()
|
107 | })
|
108 | })
|
109 | })
|