|
|
|
|
const fs = require('fs')
|
|
|
|
|
const path = require('path')
|
|
|
|
|
const luainjs = require('..')
|
|
|
|
|
|
|
|
|
|
let exitCode = 0
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const rootPath = './tests/starlight/'
|
|
|
|
|
const luaEnv = luainjs.createEnv({
|
|
|
|
|
fileExists: p => fs.existsSync(path.join(rootPath, p)),
|
|
|
|
|
loadFile: p => fs.readFileSync(path.join(rootPath, p), { encoding: 'utf8' }),
|
|
|
|
|
osExit: code => (exitCode += code)
|
|
|
|
|
})
|
|
|
|
|
luaEnv.parseFile('test-runner.lua').exec()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: make more official lua 5.3 tests pass (most of them don't pass because they `require "debug"`)
|
|
|
|
|
{
|
|
|
|
|
const rootPath = './tests/lua-5.3/'
|
|
|
|
|
const luaEnv = luainjs.createEnv({
|
|
|
|
|
fileExists: p => fs.existsSync(path.join(rootPath, p)),
|
|
|
|
|
loadFile: p => fs.readFileSync(path.join(rootPath, p), { encoding: 'utf8' }),
|
|
|
|
|
osExit: code => process.exit(code)
|
|
|
|
|
})
|
|
|
|
|
luaEnv.parseFile('goto.lua').exec()
|
|
|
|
|
luaEnv.parseFile('bwcoercion.lua').exec()
|
|
|
|
|
luaEnv.parseFile('logical_operations.lua').exec()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const luaEnv = luainjs.createEnv()
|
|
|
|
|
function helloBuilder(name) {
|
|
|
|
|
const NAME = luainjs.utils.coerceArgToString(name, 'sayHi', 1)
|
|
|
|
|
return `Hello ${NAME}!`
|
|
|
|
|
}
|
|
|
|
|
const myLib = new luainjs.Table({ helloBuilder })
|
|
|
|
|
luaEnv.loadLib('myLib', myLib)
|
|
|
|
|
const str = luaEnv.parse(`return myLib.helloBuilder('John')`).exec()
|
|
|
|
|
if (str !== 'Hello John!') {
|
|
|
|
|
throw Error("Strings don't match!")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const luaEnv = luainjs.createEnv()
|
|
|
|
|
let str
|
|
|
|
|
try {
|
|
|
|
|
str = luaEnv.parse('return "Backtick `literals` in strings work"').exec()
|
|
|
|
|
} catch (e) {
|
|
|
|
|
throw Error('Backticks in strings transpile into invalid code!')
|
|
|
|
|
}
|
|
|
|
|
if (str !== 'Backtick `literals` in strings work') {
|
|
|
|
|
throw Error('Backticks in strings transpile incorrectly!')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
process.exit(exitCode)
|