Skip to content

Do not litter Desktop with test artefacts #710

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Feb 28, 2020
Prev Previous commit
Next Next commit
WIP
  • Loading branch information
bomberstudios committed Feb 26, 2020
commit 2d43679be356b51c63afe3c653a99de1391b5ed9
22 changes: 7 additions & 15 deletions Source/dom/__tests__/export.test.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
/* globals expect, test */
import { Buffer } from 'buffer'
import fs from '@skpm/fs'
import { isRunningOnJenkins } from '../../test-utils'
import { isRunningOnJenkins, outputPath } from '../../test-utils'
import { exportObject, objectFromJSON } from '../export'
import { Shape } from '../layers/Shape'

const outputPath = NSTemporaryDirectory() + 'SketchAPI/'
NSFileManager.defaultManager().createDirectoryAtPath_withIntermediateDirectories_attributes_error(
outputPath,
true,
nil,
null
)

test('should return exported json data', () => {
const object = new Shape()
const archive = exportObject(object, {
Expand Down Expand Up @@ -80,7 +72,7 @@ if (!isRunningOnJenkins()) {
})

test('Should export a page to png file', (context, document) => {
const filePath = NSString.stringWithString(`${outputPath}/Page 1.png`)
const filePath = NSString.stringWithString(`${outputPath()}/Page 1.png`)
try {
fs.unlinkSync(filePath)
} catch (err) {
Expand All @@ -92,13 +84,13 @@ if (!isRunningOnJenkins()) {
})
exportObject(document.selectedPage, {
formats: 'png',
output: outputPath,
output: outputPath(),
})
expect(fs.existsSync(filePath)).toBe(true)
})

test('Should export a shape to png file', (context, document) => {
const filePath = NSString.stringWithString(`${outputPath}/Shape.png`)
const filePath = NSString.stringWithString(`${outputPath()}/Shape.png`)
try {
fs.unlinkSync(filePath)
} catch (err) {
Expand All @@ -109,13 +101,13 @@ if (!isRunningOnJenkins()) {
})
exportObject(object, {
formats: 'png',
output: outputPath,
output: outputPath(),
})
expect(fs.existsSync(filePath)).toBe(true)
})

test('Should export a shape to json file', (context, document) => {
const filePath = NSString.stringWithString(`${outputPath}/Shape.json`)
const filePath = NSString.stringWithString(`${outputPath()}/Shape.json`)
try {
fs.unlinkSync(filePath)
} catch (err) {
Expand All @@ -126,7 +118,7 @@ if (!isRunningOnJenkins()) {
})
exportObject(object, {
formats: 'json',
output: outputPath,
output: outputPath(),
})
expect(fs.existsSync(filePath)).toBe(true)
})
Expand Down
29 changes: 14 additions & 15 deletions Source/dom/models/__tests__/Document.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,11 @@ import {
createSymbolMaster,
createSharedStyle,
canBeLogged,
outputPath,
} from '../../../test-utils'
import { Document, Group, Shape, Text } from '../..'
import { ColorSpaceMap } from '../Document'

const outputPath = NSTemporaryDirectory() + 'SketchAPI/'
NSFileManager.defaultManager().createDirectoryAtPath_withIntermediateDirectories_attributes_error(
outputPath,
true,
nil,
null
)

test('should be able to log a document', (context, document) => {
expect(true).toBe(true)
canBeLogged(document, Document)
Expand Down Expand Up @@ -204,7 +197,7 @@ if (!isRunningOnJenkins()) {
test('should save a file', () =>
new Promise((resolve, reject) => {
_document.save(
`${outputPath}sketch-api-unit-tests.sketch`,
`${outputPath()}sketch-api-unit-tests.sketch`,
(err, result) => {
if (err) {
return reject(err)
Expand All @@ -216,7 +209,9 @@ if (!isRunningOnJenkins()) {
expect(result).toBe(_document)
expect(_document.path).toBe(
String(
NSString.stringWithString(`${outputPath}sketch-api-unit-tests.sketch`)
NSString.stringWithString(
`${outputPath()}sketch-api-unit-tests.sketch`
)
)
)
}))
Expand All @@ -233,13 +228,15 @@ if (!isRunningOnJenkins()) {
expect(result).toBe(_document)
expect(_document.path).toBe(
String(
NSString.stringWithString(`${outputPath}sketch-api-unit-tests.sketch`)
NSString.stringWithString(
`${outputPath()}sketch-api-unit-tests.sketch`
)
)
)
}))

test('should save a file to a specific path when setting the path', () => {
_document.path = `${outputPath}sketch-api-unit-tests-2.sketch`
_document.path = `${outputPath()}sketch-api-unit-tests-2.sketch`
return new Promise((resolve, reject) => {
_document.save((err, result) => {
if (err) {
Expand All @@ -252,7 +249,7 @@ if (!isRunningOnJenkins()) {
expect(_document.path).toBe(
String(
NSString.stringWithString(
`${outputPath}sketch-api-unit-tests-2.sketch`
`${outputPath()}sketch-api-unit-tests-2.sketch`
)
)
)
Expand All @@ -266,7 +263,9 @@ if (!isRunningOnJenkins()) {
})

test('should open a file', () => {
const document = Document.open(`${outputPath}sketch-api-unit-tests.sketch`)
const document = Document.open(
`${outputPath()}sketch-api-unit-tests.sketch`
)
const documents = Document.getDocuments()
expect(documents.find(d => d.id === document.id)).toEqual(document)
// close it again because when watching the tests, it will open dozens of documents
Expand All @@ -275,7 +274,7 @@ if (!isRunningOnJenkins()) {

test('should fail to open a non-existing file', () => {
try {
Document.open(`${outputPath}non-existing-sketch-api-unit-tests.sketch`)
Document.open(`${outputPath()}non-existing-sketch-api-unit-tests.sketch`)
expect(true).toBe(false)
} catch (err) {
expect(err.message).toMatch(
Expand Down
14 changes: 3 additions & 11 deletions Source/dom/models/__tests__/ImportableObject.test.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
/* globals expect, test */
import { isRunningOnJenkins } from '../../../test-utils'
import { isRunningOnJenkins, outputPath } from '../../../test-utils'
import { Library, Document, Artboard, Text, SymbolMaster } from '../..'

const outputPath = NSTemporaryDirectory() + 'SketchAPI/'
NSFileManager.defaultManager().createDirectoryAtPath_withIntermediateDirectories_attributes_error(
outputPath,
true,
nil,
null
)

// some tests cannot really run on jenkins because it doesn't have access to MSDocument
if (!isRunningOnJenkins()) {
test('should import a symbol from a lib', () => {
Expand All @@ -28,7 +20,7 @@ if (!isRunningOnJenkins()) {
const master = SymbolMaster.fromArtboard(artboard)
return new Promise((resolve, reject) => {
document.save(
`${outputPath}/sketch-api-unit-tests-importable-objects.sketch`,
`${outputPath()}/sketch-api-unit-tests-importable-objects.sketch`,
err => {
document.close()
if (err) {
Expand All @@ -39,7 +31,7 @@ if (!isRunningOnJenkins()) {
)
}).then(() => {
const lib = Library.getLibraryForDocumentAtPath(
`${outputPath}/sketch-api-unit-tests-importable-objects.sketch`
`${outputPath()}/sketch-api-unit-tests-importable-objects.sketch`
)

const document2 = new Document()
Expand Down
16 changes: 4 additions & 12 deletions Source/dom/models/__tests__/Library.test.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
/* globals expect, test */
import { isRunningOnJenkins } from '../../../test-utils'
import { isRunningOnJenkins, outputPath } from '../../../test-utils'
import { Library, Document, Artboard, Text, SymbolMaster } from '../..'

const outputPath = NSTemporaryDirectory() + 'SketchAPI/'
NSFileManager.defaultManager().createDirectoryAtPath_withIntermediateDirectories_attributes_error(
outputPath,
true,
nil,
null
)

function findValidLib(libs) {
return libs.find(l => l.valid)
}
Expand Down Expand Up @@ -57,7 +49,7 @@ if (!isRunningOnJenkins()) {

return new Promise((resolve, reject) => {
document.save(
`${outputPath}sketch-api-unit-tests-library.sketch`,
`${outputPath()}sketch-api-unit-tests-library.sketch`,
err => {
if (err) {
return reject(err)
Expand All @@ -69,7 +61,7 @@ if (!isRunningOnJenkins()) {
document.close()

lib = Library.getLibraryForDocumentAtPath(
`${outputPath}sketch-api-unit-tests-library.sketch`
`${outputPath()}sketch-api-unit-tests-library.sketch`
)
libId = lib.id
expect(lib.type).toBe('Library')
Expand Down Expand Up @@ -97,7 +89,7 @@ if (!isRunningOnJenkins()) {
expect(document.path).toBe(
String(
NSString.stringWithString(
`${outputPath}sketch-api-unit-tests-library.sketch`
`${outputPath()}sketch-api-unit-tests-library.sketch`
)
)
)
Expand Down
11 changes: 11 additions & 0 deletions Source/test-utils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { inspect } from 'util'
import { Style, SymbolMaster, Text, Artboard } from './dom'

const fs = require('@skpm/fs')

export function isRunningOnJenkins() {
return !__command.pluginBundle()
}
Expand Down Expand Up @@ -57,6 +59,15 @@ export function createSharedStyle(document: any, Primitive: any, style?: any) {
}
}

export function outputPath() {
const output = isRunningOnJenkins()
? `${process.env.$WORKSPACE}/UnitTestOutput/SketchAPI/`
: // eslint-disable-next-line
`${NSTemporaryDirectory()}SketchAPI/`
fs.mkdirSync(output, { recursive: true })
return output
}

// using a base64 image cause I'm not sure where and how to keep assets that would work with both local and jenkins tests
export const base64Image =
'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'