mirror of
https://github.com/S2-/gitlit
synced 2025-08-03 21:00:04 +02:00
138 lines
4.9 KiB
JavaScript
138 lines
4.9 KiB
JavaScript
'use strict'
|
|
|
|
// Keeping this module because it handles non-buffers gracefully
|
|
const bufferEqual = require('buffer-equal')
|
|
const common = require('../common')
|
|
const config = require('./config.json')
|
|
const fs = require('fs-extra')
|
|
const packager = require('../index')
|
|
const path = require('path')
|
|
const plist = require('plist')
|
|
const setup = require('./_setup')
|
|
const tempy = require('tempy')
|
|
const test = require('ava')
|
|
|
|
const ORIGINAL_CWD = process.cwd()
|
|
|
|
test.before(t => {
|
|
if (!process.env.CI) {
|
|
return setup.setupTestsuite()
|
|
.then(() => process.chdir(setup.WORK_CWD))
|
|
}
|
|
return Promise.resolve(process.chdir(setup.WORK_CWD))
|
|
})
|
|
|
|
test.after.always(t => {
|
|
process.chdir(ORIGINAL_CWD)
|
|
return fs.remove(setup.WORK_CWD)
|
|
})
|
|
|
|
test.beforeEach(t => {
|
|
t.context.workDir = tempy.directory()
|
|
t.context.tempDir = tempy.directory()
|
|
})
|
|
|
|
test.afterEach.always(t => {
|
|
return fs.remove(t.context.workDir)
|
|
.then(() => fs.remove(t.context.tempDir))
|
|
})
|
|
|
|
function testSinglePlatform (name, testFunction, testFunctionArgs, parallel) {
|
|
module.exports.packagerTest(name, (t, opts) => {
|
|
Object.assign(opts, module.exports.singlePlatformOptions())
|
|
return testFunction.apply(null, [t, opts].concat(testFunctionArgs))
|
|
}, parallel)
|
|
}
|
|
|
|
module.exports = {
|
|
allPlatformArchCombosCount: 9,
|
|
assertDirectory: function assertDirectory (t, pathToCheck, message) {
|
|
return fs.stat(pathToCheck)
|
|
.then(stats => t.true(stats.isDirectory(), message))
|
|
},
|
|
assertFile: function assertFile (t, pathToCheck, message) {
|
|
return fs.stat(pathToCheck)
|
|
.then(stats => t.true(stats.isFile(), message))
|
|
},
|
|
assertFilesEqual: function assertFilesEqual (t, file1, file2, message) {
|
|
return Promise.all([fs.readFile(file1), fs.readFile(file2)])
|
|
.then(([buffer1, buffer2]) => bufferEqual(buffer1, buffer2))
|
|
.then(equal => t.true(equal, message))
|
|
},
|
|
assertPathExistsCustom: function assertPathExistsCustom (t, pathToCheck, exists, message) {
|
|
return fs.pathExists(pathToCheck)
|
|
.then(result => t.is(exists, result, message))
|
|
},
|
|
assertPathExists: function assertPathExists (t, pathToCheck, message) {
|
|
return module.exports.assertPathExistsCustom(t, pathToCheck, true, message)
|
|
},
|
|
assertPathNotExists: function assertPathNotExists (t, pathToCheck, message) {
|
|
return module.exports.assertPathExistsCustom(t, pathToCheck, false, message)
|
|
},
|
|
assertSymlink: function assertFile (t, pathToCheck, message) {
|
|
return fs.lstat(pathToCheck)
|
|
.then(stats => t.true(stats.isSymbolicLink(), message))
|
|
},
|
|
fixtureSubdir: setup.fixtureSubdir,
|
|
generateResourcesPath: function generateResourcesPath (opts) {
|
|
return common.isPlatformMac(opts.platform)
|
|
? path.join(opts.name + '.app', 'Contents', 'Resources')
|
|
: 'resources'
|
|
},
|
|
invalidOptionTest: function invalidOptionTest (opts) {
|
|
return t => t.throws(packager(opts))
|
|
},
|
|
packageAndEnsureResourcesPath: function packageAndEnsureResourcesPath (t, opts) {
|
|
let resourcesPath
|
|
|
|
return packager(opts)
|
|
.then(paths => {
|
|
resourcesPath = path.join(paths[0], module.exports.generateResourcesPath(opts))
|
|
return module.exports.assertDirectory(t, resourcesPath, 'The output directory should contain the expected resources subdirectory')
|
|
}).then(() => resourcesPath)
|
|
},
|
|
packagerTest: function packagerTest (name, testFunction, parallel) {
|
|
const testDefinition = parallel ? test : test.serial
|
|
testDefinition(name, t => {
|
|
return testFunction(t, {
|
|
name: 'packagerTest',
|
|
out: t.context.workDir,
|
|
tmpdir: t.context.tempDir
|
|
})
|
|
})
|
|
},
|
|
parsePlist: function parsePlist (t, appPath) {
|
|
const plistPath = path.join(appPath, 'Contents', 'Info.plist')
|
|
|
|
return module.exports.assertFile(t, plistPath, `The expected Info.plist should exist in ${path.basename(appPath)}`)
|
|
.then(() => fs.readFile(plistPath, 'utf8'))
|
|
.then(file => plist.parse(file))
|
|
},
|
|
singlePlatformOptions: function singlePlatformOptions () {
|
|
return {
|
|
platform: 'linux',
|
|
arch: 'x64',
|
|
electronVersion: config.version
|
|
}
|
|
},
|
|
// Rest parameters are added (not behind a feature flag) in Node 6
|
|
testSinglePlatform: function (name, testFunction /*, ...testFunctionArgs */) {
|
|
const testFunctionArgs = Array.prototype.slice.call(arguments, 2)
|
|
return testSinglePlatform(name, testFunction, testFunctionArgs, false)
|
|
},
|
|
// Rest parameters are added (not behind a feature flag) in Node 6
|
|
testSinglePlatformParallel: function (name, testFunction /*, ...testFunctionArgs */) {
|
|
const testFunctionArgs = Array.prototype.slice.call(arguments, 2)
|
|
return testSinglePlatform(name, testFunction, testFunctionArgs, true)
|
|
},
|
|
verifyPackageExistence: function verifyPackageExistence (finalPaths) {
|
|
return Promise.all(finalPaths.map(finalPath => {
|
|
return fs.stat(finalPath)
|
|
.then(
|
|
stats => stats.isDirectory(),
|
|
() => false
|
|
)
|
|
}))
|
|
}
|
|
}
|