mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-18 16:11:38 +03:00
162 lines
4.5 KiB
TypeScript
162 lines
4.5 KiB
TypeScript
|
// Copyright 2019-2021 Tauri Programme within The Commons Conservancy
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
import execa from 'execa'
|
||
|
import fixtures from 'fixturez'
|
||
|
const f = fixtures(__dirname)
|
||
|
import path from 'path'
|
||
|
import fs from 'fs'
|
||
|
|
||
|
const ctaBinary = path.resolve('./bin/create-tauri-app.js')
|
||
|
const clijs = path.resolve('../cli.js/')
|
||
|
const api = path.resolve('../api/')
|
||
|
|
||
|
const manager = process.env.TAURI_RUN_MANAGER ?? 'npm'
|
||
|
const recipes = process.env.TAURI_RECIPE
|
||
|
? [process.env.TAURI_RECIPE]
|
||
|
: ['vanillajs', 'reactjs', 'reactts', 'vite', 'vuecli']
|
||
|
const timeoutLong = 900000
|
||
|
const timeoutLittleLonger = 930000
|
||
|
const logOut = false ? 'inherit' : 'pipe'
|
||
|
|
||
|
beforeAll(async () => {
|
||
|
const installCLI = await execa('yarn', [], {
|
||
|
stdio: logOut,
|
||
|
cwd: clijs,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
|
||
|
const buildCLI = await execa('yarn', ['build-release'], {
|
||
|
stdio: logOut,
|
||
|
cwd: clijs,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
|
||
|
const linkCLI = await execa('yarn', ['link'], {
|
||
|
stdio: logOut,
|
||
|
cwd: clijs,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
|
||
|
const installAPI = await execa('yarn', [], {
|
||
|
stdio: logOut,
|
||
|
cwd: api,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
|
||
|
const buildAPI = await execa('yarn', ['build'], {
|
||
|
stdio: logOut,
|
||
|
cwd: api,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
|
||
|
const linkAPI = await execa('yarn', ['link'], {
|
||
|
stdio: logOut,
|
||
|
cwd: api,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
}, timeoutLittleLonger)
|
||
|
|
||
|
describe('CTA', () => {
|
||
|
describe.each(recipes.map((recipe) => [recipe, 'tauri-app']))(
|
||
|
`%s recipe`,
|
||
|
(recipe: string, appName: string) => {
|
||
|
it(
|
||
|
'runs',
|
||
|
async () => {
|
||
|
// creates a temp folder to run CTA within (this is our cwd)
|
||
|
const folder = f.temp()
|
||
|
const appFolder = path.join(folder, appName)
|
||
|
|
||
|
// runs CTA with all args set to avoid any prompts
|
||
|
const cta = await execa(
|
||
|
'node',
|
||
|
[
|
||
|
ctaBinary,
|
||
|
'--manager',
|
||
|
manager,
|
||
|
'--recipe',
|
||
|
recipe,
|
||
|
'--ci',
|
||
|
'--dev'
|
||
|
],
|
||
|
{
|
||
|
all: true,
|
||
|
stdio: logOut,
|
||
|
cwd: folder,
|
||
|
timeout: timeoutLong
|
||
|
}
|
||
|
)
|
||
|
|
||
|
// check to make certain it didn't fail anywhere
|
||
|
expect(cta.failed).toBe(false)
|
||
|
expect(cta.timedOut).toBe(false)
|
||
|
expect(cta.isCanceled).toBe(false)
|
||
|
expect(cta.killed).toBe(false)
|
||
|
expect(cta.signal).toBe(undefined)
|
||
|
|
||
|
// run a tauri build to check if what we produced
|
||
|
// can actually create an app
|
||
|
// TODO long term we will want to hook this up to a real test harness
|
||
|
// and then run that test suite instead
|
||
|
let opts: string[] = []
|
||
|
if (manager === 'npm') {
|
||
|
opts = ['run', 'tauri', '--', 'build']
|
||
|
} else if (manager === 'yarn') {
|
||
|
opts = ['tauri', 'build']
|
||
|
}
|
||
|
const tauriBuild = await execa(manager, opts, {
|
||
|
all: true,
|
||
|
stdio: logOut,
|
||
|
cwd: appFolder,
|
||
|
timeout: timeoutLong
|
||
|
})
|
||
|
|
||
|
expect(tauriBuild.failed).toBe(false)
|
||
|
expect(tauriBuild.timedOut).toBe(false)
|
||
|
expect(tauriBuild.isCanceled).toBe(false)
|
||
|
expect(tauriBuild.killed).toBe(false)
|
||
|
expect(tauriBuild.signal).toBe(undefined)
|
||
|
|
||
|
const packageFileOutput: {
|
||
|
[k: string]: string | object
|
||
|
} = JSON.parse(
|
||
|
await fs.promises.readFile(
|
||
|
path.join(appFolder, 'package.json'),
|
||
|
'utf-8'
|
||
|
)
|
||
|
)
|
||
|
expect(packageFileOutput['name']).toBe(appName)
|
||
|
|
||
|
const assertCustom: { [k: string]: Function } = {
|
||
|
vanillajs: () => {
|
||
|
expect(packageFileOutput['scripts']).toMatchObject({
|
||
|
tauri: 'tauri'
|
||
|
})
|
||
|
},
|
||
|
reactjs: () => {
|
||
|
expect(packageFileOutput['scripts']).toEqual(
|
||
|
expect.objectContaining({
|
||
|
tauri: 'tauri'
|
||
|
})
|
||
|
)
|
||
|
},
|
||
|
reactts: () => {
|
||
|
expect(packageFileOutput['scripts']).toEqual(
|
||
|
expect.objectContaining({
|
||
|
tauri: 'tauri'
|
||
|
})
|
||
|
)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const getCustomAsserts = assertCustom[recipe]
|
||
|
if (getCustomAsserts) getCustomAsserts()
|
||
|
},
|
||
|
timeoutLittleLonger
|
||
|
)
|
||
|
}
|
||
|
)
|
||
|
})
|