Merge pull request #944 from ethereum/import_fix

Import fix, winston logger, intro message
pull/7/head
Iuri Matias 7 years ago committed by GitHub
commit b36c6f0222
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      remix-tests/examples/simple_storage2_test.sol
  2. 2
      remix-tests/examples/simple_storage_test.sol
  3. 4
      remix-tests/package.json
  4. 26
      remix-tests/src/compiler.js
  5. 29
      remix-tests/src/index.js
  6. 58
      remix-tests/src/logger.js
  7. 48
      remix-tests/src/run.js
  8. 2
      remix-tests/tests/examples_1/simple_storage_test.sol
  9. 2
      remix-tests/tests/examples_2/simple_storage_test.sol
  10. 1
      remix-tests/tests/examples_3/simple_string_test.sol

@ -1,5 +1,5 @@
pragma solidity ^0.4.7;
import "./tests.sol";
import "remix_test.sol";
import "./simple_storage.sol";
contract MyTest2 {
@ -26,4 +26,3 @@ contract MyTest2 {
}
}

@ -1,5 +1,4 @@
pragma solidity ^0.4.7;
import "./tests.sol";
import "./simple_storage.sol";
contract MyTest {
@ -26,4 +25,3 @@ contract MyTest {
}
}

@ -43,9 +43,11 @@
"commander": "^2.13.0",
"remix-simulator": "0.0.3",
"remix-solidity": "^0.2.7",
"signale": "^1.2.1",
"solc": "^0.4.24",
"standard": "^10.0.3",
"web3": "1.0.0-beta.27"
"web3": "1.0.0-beta.27",
"winston": "^3.0.0"
},
"devDependencies": {
"mocha": "^5.1.0"

@ -1,11 +1,16 @@
/* eslint no-extend-native: "warn" */
let fs = require('fs')
var async = require('async')
var path = require('path')
const signale = require('signale')
let RemixCompiler = require('remix-solidity').Compiler
// TODO: replace this with remix's own compiler code
String.prototype.regexIndexOf = function (regex, startpos) {
var indexOf = this.substring(startpos || 0).search(regex)
return (indexOf >= 0) ? (indexOf + (startpos || 0)) : indexOf
}
// TODO: replace this with remix's own compiler code
function compileFileOrFiles (filename, isDirectory, cb) {
let compiler, filepath
@ -13,13 +18,22 @@ function compileFileOrFiles (filename, isDirectory, cb) {
'tests.sol': { content: require('../sol/tests.sol.js') },
'remix_tests.sol': { content: require('../sol/tests.sol.js') }
}
// signale.debug(sources)
// TODO: for now assumes filepath dir contains all tests, later all this
// should be replaced with remix's & browser solidity compiler code
filepath = (isDirectory ? filename : path.dirname(filename))
fs.readdirSync(filepath).forEach(file => {
sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()}
// only process .sol files
if (file.split('.').pop() === 'sol') {
let c = fs.readFileSync(path.join(filepath, file)).toString()
const s = /^(import)\s['"](remix_tests.sol|tests.sol)['"];/gm
if (file.indexOf('_test.sol') > 0 && c.regexIndexOf(s) < 0) {
c = c.replace(/(pragma solidity \^\d+\.\d+\.\d+;)/, '$1\nimport \'remix_tests.sol\';')
}
sources[file] = { content: c }
}
})
async.waterfall([
@ -39,7 +53,7 @@ function compileFileOrFiles (filename, isDirectory, cb) {
], function (err, result) {
let errors = (result.errors || []).filter((e) => e.type === 'Error' || e.severity === 'error')
if (errors.length > 0) {
console.dir(errors)
signale.fatal(errors)
return cb(new Error('errors compiling'))
}
cb(err, result.contracts)
@ -50,7 +64,7 @@ function compileContractSources (sources, importFileCb, cb) {
let compiler, filepath
if (!sources['remix_tests.sol']) {
sources['remix_tests.sol'] = {content: require('../sol/tests.sol.js')}
sources['remix_tests.sol'] = { content: require('../sol/tests.sol.js') }
}
async.waterfall([
@ -70,7 +84,7 @@ function compileContractSources (sources, importFileCb, cb) {
], function (err, result) {
let errors = (result.errors || []).filter((e) => e.type === 'Error' || e.severity === 'error')
if (errors.length > 0) {
console.dir(errors)
signale.fatal(errors)
return cb(new Error('errors compiling'))
}
cb(err, result.contracts)

@ -1,6 +1,7 @@
const async = require('async')
const path = require('path')
const fs = require('fs')
const { Signale } = require('signale')
require('colors')
let Compiler = require('./compiler.js')
@ -16,6 +17,28 @@ var createWeb3Provider = function () {
return web3
}
// signale configuration
const options = {
types: {
result: {
badge: '\t✓',
label: '',
color: 'greenBright'
},
name: {
badge: '\n\t◼',
label: '',
color: 'white'
},
error: {
badge: '\t✘',
label: '',
color: 'redBright'
}
}
}
const signale = new Signale(options)
var runTestSources = function (contractSources, testCallback, resultCallback, finalCallback, importFileCb) {
async.waterfall([
function compile (next) {
@ -134,11 +157,11 @@ var runTestFiles = function (filepath, isDirectory, web3) {
var testCallback = function (result) {
if (result.type === 'contract') {
console.log('\n ' + result.value)
signale.name(result.value.white)
} else if (result.type === 'testPass') {
console.log('\t✓ '.green.bold + result.value.grey)
signale.result(result.value)
} else if (result.type === 'testFailure') {
console.log('\t✘ '.bold.red + result.value.red)
signale.result(result.value.red)
errors.push(result)
}
}

@ -0,0 +1,58 @@
var gray = require('ansi-gray')
const winston = require('winston')
var timestamp = require('time-stamp')
var supportsColor = require('color-support')
function hasFlag (flag) {
return ((typeof (process) !== 'undefined') && (process.argv.indexOf('--' + flag) !== -1))
}
function addColor (str) {
if (hasFlag('no-color')) {
return str
}
if (hasFlag('color')) {
return gray(str)
}
if (supportsColor()) {
return gray(str)
}
return str
}
function getTimestamp () {
return '[' + addColor(timestamp('HH:mm:ss')) + ']'
}
// create winston logger format
const logFmt = winston.format.printf((info) => {
return `${getTimestamp()} ${info.level}: ${info.message}`
})
class Log {
constructor () {
this.logger = winston.createLogger({
level: 'error',
transports: [new winston.transports.Console()],
format: winston.format.combine(
winston.format.colorize({ all: true }),
logFmt
)
})
}
setVerbosity (v) {
this.logger.configure({
level: v,
transports: [new winston.transports.Console()],
format: winston.format.combine(
winston.format.colorize({ all: true }),
logFmt
)
})
}
}
module.exports = {
Log
}

@ -2,21 +2,49 @@ const commander = require('commander')
const Web3 = require('web3')
const RemixTests = require('./index.js')
const fs = require('fs')
const Provider = require('remix-simulator').Provider
const { Log } = require('./logger.js')
const logger = new Log()
const log = logger.logger
require('colors')
commander.action(function (filename) {
let web3 = new Web3()
// web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
web3.setProvider(new Provider())
// web3.setProvider(new web3.providers.WebsocketProvider('ws://localhost:8546'))
// parse verbosity
function mapVerbosity (v) {
const levels = {
0: 'error',
1: 'warn',
2: 'info',
3: 'verbose',
4: 'debug',
5: 'silly'
}
return levels[v]
}
// get current version
const pjson = require('../package.json')
commander
.version(pjson.version)
.option('-v, --verbose <level>', 'run with verbosity', mapVerbosity)
.action(function (filename) {
// Console message
console.log(('\n\t👁 :: Running remix-tests - Unit testing for solidity :: 👁\t\n').white)
// set logger verbosity
if (commander.verbose) {
logger.setVerbosity(commander.verbose)
log.info('verbosity level set to ' + commander.verbose.blue)
}
let web3 = new Web3()
// web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
web3.setProvider(new Provider())
// web3.setProvider(new web3.providers.WebsocketProvider('ws://localhost:8546'))
let isDirectory = fs.lstatSync(filename).isDirectory()
RemixTests.runTestFiles(filename, isDirectory, web3)
})
let isDirectory = fs.lstatSync(filename).isDirectory()
RemixTests.runTestFiles(filename, isDirectory, web3)
})
if (!process.argv.slice(2).length) {
console.log('please specify filename')
log.error('Please specify a filename')
process.exit()
}
commander.parse(process.argv)

@ -1,5 +1,4 @@
pragma solidity ^0.4.7;
import "remix_tests.sol";
import "./simple_storage.sol";
contract MyTest {
@ -29,4 +28,3 @@ contract MyTest {
}
}

@ -1,5 +1,4 @@
pragma solidity ^0.4.7;
import "./tests.sol";
import "./simple_storage.sol";
contract MyTest {
@ -25,4 +24,3 @@ contract MyTest {
}
}

@ -1,5 +1,4 @@
pragma solidity ^0.4.7;
import "./tests.sol";
import "./simple_string.sol";
contract StringTest {

Loading…
Cancel
Save