|
|
|
import * as async from 'async'
|
|
|
|
import Web3 from 'web3'
|
|
|
|
import * as assert from 'assert'
|
|
|
|
import { Provider } from 'remix-simulator'
|
|
|
|
|
|
|
|
import { compileFileOrFiles } from '../dist/compiler'
|
|
|
|
import { deployAll } from '../dist/deployer'
|
|
|
|
import { runTest } from '../dist/testRunner'
|
|
|
|
import { ResultsInterface, TestCbInterface, ResultCbInterface } from '../dist/types'
|
|
|
|
|
|
|
|
function compileAndDeploy(filename: string, callback: Function) {
|
|
|
|
let web3: Web3 = new Web3()
|
|
|
|
web3.setProvider(new Provider())
|
|
|
|
let compilationData: object
|
|
|
|
let accounts: string[]
|
|
|
|
async.waterfall([
|
|
|
|
function getAccountList(next: Function): void {
|
|
|
|
web3.eth.getAccounts((_err: Error | null | undefined, _accounts: string[]) => {
|
|
|
|
accounts = _accounts
|
|
|
|
next(_err)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
function compile(next: Function): void {
|
|
|
|
compileFileOrFiles(filename, false, { accounts }, next)
|
|
|
|
},
|
|
|
|
function deployAllContracts(compilationResult: object, next: Function): void {
|
|
|
|
try {
|
|
|
|
compilationData = compilationResult
|
|
|
|
deployAll(compilationResult, web3, next)
|
|
|
|
} catch (e) {
|
|
|
|
throw e
|
|
|
|
}
|
|
|
|
}
|
|
|
|
], function (_err: Error | null | undefined, contracts: any): void {
|
|
|
|
callback(null, compilationData, contracts, accounts)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
describe('testRunner', () => {
|
|
|
|
describe('#runTest', () => {
|
|
|
|
describe('test with beforeAll', () => {
|
|
|
|
let filename: string = 'tests/examples_1/simple_storage_test.sol'
|
|
|
|
let tests: any[] = [], results: ResultsInterface;
|
|
|
|
|
|
|
|
before((done) => {
|
|
|
|
compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: object, contracts: any, accounts: object) => {
|
|
|
|
var testCallback: TestCbInterface = (err, test) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
tests.push(test)
|
|
|
|
}
|
|
|
|
var resultsCallback: ResultCbInterface = (err, _results) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
results = _results
|
|
|
|
done()
|
|
|
|
}
|
|
|
|
runTest('MyTest', contracts.MyTest, compilationData[filename]['MyTest'], { accounts }, testCallback, resultsCallback)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should 1 passing test', function () {
|
|
|
|
assert.equal(results.passingNum, 2)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should 1 failing test', function () {
|
|
|
|
assert.equal(results.failureNum, 2)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should returns 5 messages', function () {
|
|
|
|
assert.deepEqual(tests, [
|
|
|
|
{ type: 'contract', value: 'MyTest', filename: 'tests/examples_1/simple_storage_test.sol' },
|
|
|
|
{ type: 'testFailure', value: 'Should trigger one fail', time: 1, context: 'MyTest', errMsg: 'the test 1 fails' },
|
|
|
|
{ type: 'testPass', value: 'Should trigger one pass', time: 1, context: 'MyTest' },
|
|
|
|
{ type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' },
|
|
|
|
{ type: 'testFailure', value: 'Initial value should be200', time: 1, context: 'MyTest', errMsg: 'function returned false' }
|
|
|
|
])
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('test with beforeEach', function () {
|
|
|
|
let filename = 'tests/examples_2/simple_storage_test.sol'
|
|
|
|
let tests: any[] = [], results: ResultsInterface;
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: object, contracts: any, accounts: object) {
|
|
|
|
var testCallback: TestCbInterface = (err, test) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
tests.push(test)
|
|
|
|
}
|
|
|
|
var resultsCallback: ResultCbInterface = (err, _results) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
results = _results
|
|
|
|
done()
|
|
|
|
}
|
|
|
|
runTest('MyTest', contracts.MyTest, compilationData[filename]['MyTest'], { accounts }, testCallback, resultsCallback)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should 2 passing tests', function () {
|
|
|
|
assert.equal(results.passingNum, 2)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should 0 failing tests', function () {
|
|
|
|
assert.equal(results.failureNum, 0)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should returns 3 messages', function () {
|
|
|
|
assert.deepEqual(tests, [
|
|
|
|
{ type: 'contract', value: 'MyTest', filename: 'tests/examples_2/simple_storage_test.sol' },
|
|
|
|
{ type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' },
|
|
|
|
{ type: 'testPass', value: 'Initial value should be200', time: 1, context: 'MyTest' }
|
|
|
|
])
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
// Test string equality
|
|
|
|
describe('test string equality', function () {
|
|
|
|
let filename = 'tests/examples_3/simple_string_test.sol'
|
|
|
|
let tests: any[] = [], results: ResultsInterface;
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
compileAndDeploy(filename, function (_err, compilationData, contracts, accounts) {
|
|
|
|
var testCallback: TestCbInterface = (err, test) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
tests.push(test)
|
|
|
|
}
|
|
|
|
var resultsCallback: ResultCbInterface = (err, _results) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
results = _results
|
|
|
|
done()
|
|
|
|
}
|
|
|
|
runTest('StringTest', contracts.StringTest, compilationData[filename]['StringTest'], { accounts }, testCallback, resultsCallback)
|
|
|
|
runTest('StringTest2', contracts.StringTest2, compilationData[filename]['StringTest2'], { accounts }, testCallback, resultsCallback)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should 2 passing tests', function () {
|
|
|
|
assert.equal(results.passingNum, 2)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should 1 failing tests', function () {
|
|
|
|
assert.equal(results.failureNum, 1)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should returns 3 messages', function () {
|
|
|
|
assert.deepEqual(tests, [
|
|
|
|
{ type: 'contract', value: 'StringTest', filename: 'tests/examples_3/simple_string_test.sol' },
|
|
|
|
{ type: 'testFailure', value: 'Value should be hello world', time: 1, context: 'StringTest', "errMsg": "initial value is not correct" },
|
|
|
|
{ type: 'testPass', value: 'Value should not be hello wordl', time: 1, context: 'StringTest' },
|
|
|
|
{ type: 'testPass', value: 'Initial value should be hello', time: 1, context: 'StringTest' },
|
|
|
|
])
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
//Test signed/unsigned integer weight
|
|
|
|
describe('test number weight', function () {
|
|
|
|
let filename = 'tests/number/number_test.sol'
|
|
|
|
let tests: any[] = [], results: ResultsInterface;
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
compileAndDeploy(filename, function (_err, compilationData, contracts, accounts) {
|
|
|
|
var testCallback: TestCbInterface = (err, test) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
tests.push(test)
|
|
|
|
}
|
|
|
|
var resultsCallback: ResultCbInterface = (err, _results) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
results = _results
|
|
|
|
done()
|
|
|
|
}
|
|
|
|
runTest('IntegerTest', contracts.IntegerTest, compilationData[filename]['IntegerTest'], { accounts }, testCallback, resultsCallback)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should have 6 passing tests', function () {
|
|
|
|
assert.equal(results.passingNum, 6)
|
|
|
|
})
|
|
|
|
it('should have 2 failing tests', function () {
|
|
|
|
assert.equal(results.failureNum, 2)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
// Test Transaction with different sender
|
|
|
|
describe('various sender', function () {
|
|
|
|
let filename = 'tests/various_sender/sender_test.sol'
|
|
|
|
let tests: any[] = [], results: ResultsInterface;
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
compileAndDeploy(filename, function (_err, compilationData, contracts, accounts) {
|
|
|
|
var testCallback: TestCbInterface = (err, test) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
tests.push(test)
|
|
|
|
}
|
|
|
|
var resultsCallback: ResultCbInterface = (err, _results) => {
|
|
|
|
if (err) { throw err }
|
|
|
|
results = _results
|
|
|
|
done()
|
|
|
|
}
|
|
|
|
|
|
|
|
runTest('SenderTest', contracts.SenderTest, compilationData[filename]['SenderTest'], { accounts }, testCallback, resultsCallback)
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should have 4 passing tests', function () {
|
|
|
|
assert.equal(results.passingNum, 4)
|
|
|
|
})
|
|
|
|
it('should have 1 failing tests', function () {
|
|
|
|
assert.equal(results.failureNum, 0)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|