UNPKG

3.43 kBJavaScriptView Raw
1/* @flow */
2
3import 'babel-polyfill'
4import path from 'path'
5
6import CopyTargetsToRoot from '../../src/Rules/CopyTargetsToRoot'
7import { initializeRule } from '../helpers'
8
9import type { RuleDefinition } from '../helpers'
10
11async 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
22describe('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})