mirror of
https://github.com/S2-/gitlit
synced 2025-08-03 12:50:04 +02:00
215 lines
6.4 KiB
JavaScript
215 lines
6.4 KiB
JavaScript
'use strict'
|
|
|
|
const config = require('./config.json')
|
|
const packager = require('..')
|
|
const path = require('path')
|
|
const test = require('ava')
|
|
const util = require('./_util')
|
|
const win32 = require('../win32')
|
|
|
|
const win32Opts = {
|
|
name: 'basicTest',
|
|
dir: util.fixtureSubdir('basic'),
|
|
electronVersion: config.version,
|
|
arch: 'x64',
|
|
platform: 'win32'
|
|
}
|
|
|
|
function generateRceditOptionsSansIcon (opts) {
|
|
return new win32.App(opts).generateRceditOptionsSansIcon()
|
|
}
|
|
|
|
function generateVersionStringTest (metadataProperties, extraOpts, expectedValues, assertionMsgs) {
|
|
return t => {
|
|
const opts = Object.assign({}, win32Opts, extraOpts)
|
|
const rcOpts = generateRceditOptionsSansIcon(opts)
|
|
|
|
metadataProperties = [].concat(metadataProperties)
|
|
expectedValues = [].concat(expectedValues)
|
|
assertionMsgs = [].concat(assertionMsgs)
|
|
metadataProperties.forEach((property, i) => {
|
|
const value = expectedValues[i]
|
|
const msg = assertionMsgs[i]
|
|
if (property === 'version-string') {
|
|
for (const subkey in value) {
|
|
t.is(rcOpts[property][subkey], value[subkey], `${msg} (${subkey})`)
|
|
}
|
|
} else {
|
|
t.is(rcOpts[property], value, msg)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
function setFileVersionTest (buildVersion) {
|
|
const appVersion = '4.99.101.0'
|
|
const opts = {
|
|
appVersion: appVersion,
|
|
buildVersion: buildVersion
|
|
}
|
|
|
|
return generateVersionStringTest(
|
|
['product-version', 'file-version'],
|
|
opts,
|
|
[appVersion, buildVersion],
|
|
['Product version should match app version',
|
|
'File version should match build version']
|
|
)
|
|
}
|
|
|
|
function setProductVersionTest (appVersion) {
|
|
return generateVersionStringTest(
|
|
['product-version', 'file-version'],
|
|
{ appVersion: appVersion },
|
|
[appVersion, appVersion],
|
|
['Product version should match app version',
|
|
'File version should match app version']
|
|
)
|
|
}
|
|
|
|
function setCopyrightTest (appCopyright) {
|
|
const opts = {
|
|
appCopyright: appCopyright
|
|
}
|
|
|
|
return generateVersionStringTest('version-string', opts, {LegalCopyright: appCopyright}, 'Legal copyright should match app copyright')
|
|
}
|
|
|
|
function setCopyrightAndCompanyNameTest (appCopyright, companyName) {
|
|
const opts = {
|
|
appCopyright: appCopyright,
|
|
win32metadata: {
|
|
CompanyName: companyName
|
|
}
|
|
}
|
|
|
|
return generateVersionStringTest(
|
|
'version-string',
|
|
opts,
|
|
{LegalCopyright: appCopyright, CompanyName: companyName},
|
|
'Legal copyright should match app copyright and Company name should match win32metadata value'
|
|
)
|
|
}
|
|
|
|
function setRequestedExecutionLevelTest (requestedExecutionLevel) {
|
|
const opts = {
|
|
win32metadata: {
|
|
'requested-execution-level': requestedExecutionLevel
|
|
}
|
|
}
|
|
|
|
return generateVersionStringTest(
|
|
'requested-execution-level',
|
|
opts,
|
|
requestedExecutionLevel,
|
|
'requested-execution-level in win32metadata should match rcOpts value'
|
|
)
|
|
}
|
|
|
|
function setApplicationManifestTest (applicationManifest) {
|
|
const opts = {
|
|
win32metadata: {
|
|
'application-manifest': applicationManifest
|
|
}
|
|
}
|
|
|
|
return generateVersionStringTest(
|
|
'application-manifest',
|
|
opts,
|
|
applicationManifest,
|
|
'application-manifest in win32metadata should match rcOpts value'
|
|
)
|
|
}
|
|
|
|
function setCompanyNameTest (companyName) {
|
|
const opts = {
|
|
win32metadata: {
|
|
CompanyName: companyName
|
|
}
|
|
}
|
|
|
|
return generateVersionStringTest('version-string',
|
|
opts,
|
|
{CompanyName: companyName},
|
|
`Company name should match win32metadata value`)
|
|
}
|
|
|
|
test('better error message when wine is not found', (t) => {
|
|
let err = Error('spawn wine ENOENT')
|
|
err.code = 'ENOENT'
|
|
err.syscall = 'spawn wine'
|
|
|
|
t.is(err.message, 'spawn wine ENOENT')
|
|
err = win32.updateWineMissingException(err)
|
|
t.not(err.message, 'spawn wine ENOENT')
|
|
})
|
|
|
|
test('error message unchanged when error not about wine', t => {
|
|
let errNotEnoent = Error('unchanged')
|
|
errNotEnoent.code = 'ESOMETHINGELSE'
|
|
errNotEnoent.syscall = 'spawn wine'
|
|
|
|
t.is(errNotEnoent.message, 'unchanged')
|
|
errNotEnoent = win32.updateWineMissingException(errNotEnoent)
|
|
t.is(errNotEnoent.message, 'unchanged')
|
|
|
|
let errNotSpawnWine = Error('unchanged')
|
|
errNotSpawnWine.code = 'ENOENT'
|
|
errNotSpawnWine.syscall = 'spawn foo'
|
|
|
|
t.is(errNotSpawnWine.message, 'unchanged')
|
|
errNotSpawnWine = win32.updateWineMissingException(errNotSpawnWine)
|
|
t.is(errNotSpawnWine.message, 'unchanged')
|
|
})
|
|
|
|
test('win32metadata defaults', t => {
|
|
const opts = { name: 'Win32 App' }
|
|
const rcOpts = generateRceditOptionsSansIcon(opts)
|
|
|
|
t.is(rcOpts['version-string'].FileDescription, opts.name, 'default FileDescription')
|
|
t.is(rcOpts['version-string'].InternalName, opts.name, 'default InternalName')
|
|
t.is(rcOpts['version-string'].OriginalFilename, 'Win32 App.exe', 'default OriginalFilename')
|
|
t.is(rcOpts['version-string'].ProductName, opts.name, 'default ProductName')
|
|
})
|
|
|
|
function win32Test (description, extraOpts, executableBasename, executableMessage) {
|
|
util.packagerTest(description, (t, opts) => {
|
|
Object.assign(opts, win32Opts, extraOpts)
|
|
|
|
return packager(opts)
|
|
.then(paths => {
|
|
t.is(1, paths.length, '1 bundle created')
|
|
return util.assertPathExists(t, path.join(paths[0], `${executableBasename}.exe`), executableMessage)
|
|
})
|
|
})
|
|
}
|
|
|
|
win32Test(
|
|
'win32 executable name is based on sanitized app name',
|
|
{ name: '@username/package-name' },
|
|
'@username-package-name',
|
|
'The sanitized EXE filename should exist'
|
|
)
|
|
|
|
win32Test(
|
|
'win32 executable name uses executableName when available',
|
|
{ name: 'PackageName', executableName: 'my-package' },
|
|
'my-package',
|
|
'the executableName-based filename should exist'
|
|
)
|
|
|
|
win32Test(
|
|
'win32 icon set',
|
|
{ executableName: 'iconTest', arch: 'ia32', icon: path.join(__dirname, 'fixtures', 'monochrome') },
|
|
'iconTest',
|
|
'the Electron executable should exist'
|
|
)
|
|
|
|
test('win32 build version sets FileVersion test', setFileVersionTest('2.3.4.5'))
|
|
test('win32 app version sets ProductVersion test', setProductVersionTest('5.4.3.2'))
|
|
test('win32 app copyright sets LegalCopyright test', setCopyrightTest('Copyright Bar'))
|
|
test('win32 set LegalCopyright and CompanyName test', setCopyrightAndCompanyNameTest('Copyright Bar', 'MyCompany LLC'))
|
|
test('win32 set CompanyName test', setCompanyNameTest('MyCompany LLC'))
|
|
test('win32 set requested-execution-level test', setRequestedExecutionLevelTest('asInvoker'))
|
|
test('win32 set application-manifest test', setApplicationManifestTest('/path/to/manifest.xml'))
|