Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
baas-ide
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guxukai
baas-ide
Commits
b36c6f02
Unverified
Commit
b36c6f02
authored
Aug 28, 2018
by
Iuri Matias
Committed by
GitHub
Aug 28, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #944 from ethereum/import_fix
Import fix, winston logger, intro message
parents
d82356c6
ed4ff924
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
140 additions
and
23 deletions
+140
-23
simple_storage2_test.sol
remix-tests/examples/simple_storage2_test.sol
+1
-2
simple_storage_test.sol
remix-tests/examples/simple_storage_test.sol
+0
-2
package.json
remix-tests/package.json
+3
-1
compiler.js
remix-tests/src/compiler.js
+20
-6
index.js
remix-tests/src/index.js
+26
-3
logger.js
remix-tests/src/logger.js
+58
-0
run.js
remix-tests/src/run.js
+32
-4
simple_storage_test.sol
remix-tests/tests/examples_1/simple_storage_test.sol
+0
-2
simple_storage_test.sol
remix-tests/tests/examples_2/simple_storage_test.sol
+0
-2
simple_string_test.sol
remix-tests/tests/examples_3/simple_string_test.sol
+0
-1
No files found.
remix-tests/examples/simple_storage2_test.sol
View file @
b36c6f02
pragma solidity ^0.4.7;
pragma solidity ^0.4.7;
import "
./tests
.sol";
import "
remix_test
.sol";
import "./simple_storage.sol";
import "./simple_storage.sol";
contract MyTest2 {
contract MyTest2 {
...
@@ -26,4 +26,3 @@ contract MyTest2 {
...
@@ -26,4 +26,3 @@ contract MyTest2 {
}
}
}
}
remix-tests/examples/simple_storage_test.sol
View file @
b36c6f02
pragma solidity ^0.4.7;
pragma solidity ^0.4.7;
import "./tests.sol";
import "./simple_storage.sol";
import "./simple_storage.sol";
contract MyTest {
contract MyTest {
...
@@ -26,4 +25,3 @@ contract MyTest {
...
@@ -26,4 +25,3 @@ contract MyTest {
}
}
}
}
remix-tests/package.json
View file @
b36c6f02
...
@@ -43,9 +43,11 @@
...
@@ -43,9 +43,11 @@
"commander"
:
"^2.13.0"
,
"commander"
:
"^2.13.0"
,
"remix-simulator"
:
"0.0.3"
,
"remix-simulator"
:
"0.0.3"
,
"remix-solidity"
:
"^0.2.7"
,
"remix-solidity"
:
"^0.2.7"
,
"signale"
:
"^1.2.1"
,
"solc"
:
"^0.4.24"
,
"solc"
:
"^0.4.24"
,
"standard"
:
"^10.0.3"
,
"standard"
:
"^10.0.3"
,
"web3"
:
"1.0.0-beta.27"
"web3"
:
"1.0.0-beta.27"
,
"winston"
:
"^3.0.0"
},
},
"devDependencies"
:
{
"devDependencies"
:
{
"mocha"
:
"^5.1.0"
"mocha"
:
"^5.1.0"
...
...
remix-tests/src/compiler.js
View file @
b36c6f02
/* eslint no-extend-native: "warn" */
let
fs
=
require
(
'fs'
)
let
fs
=
require
(
'fs'
)
var
async
=
require
(
'async'
)
var
async
=
require
(
'async'
)
var
path
=
require
(
'path'
)
var
path
=
require
(
'path'
)
const
signale
=
require
(
'signale'
)
let
RemixCompiler
=
require
(
'remix-solidity'
).
Compiler
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
)
{
function
compileFileOrFiles
(
filename
,
isDirectory
,
cb
)
{
let
compiler
,
filepath
let
compiler
,
filepath
...
@@ -13,13 +18,22 @@ function compileFileOrFiles (filename, isDirectory, cb) {
...
@@ -13,13 +18,22 @@ function compileFileOrFiles (filename, isDirectory, cb) {
'tests.sol'
:
{
content
:
require
(
'../sol/tests.sol.js'
)
},
'tests.sol'
:
{
content
:
require
(
'../sol/tests.sol.js'
)
},
'remix_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
// TODO: for now assumes filepath dir contains all tests, later all this
// should be replaced with remix's & browser solidity compiler code
// should be replaced with remix's & browser solidity compiler code
filepath
=
(
isDirectory
?
filename
:
path
.
dirname
(
filename
))
filepath
=
(
isDirectory
?
filename
:
path
.
dirname
(
filename
))
fs
.
readdirSync
(
filepath
).
forEach
(
file
=>
{
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
([
async
.
waterfall
([
...
@@ -39,7 +53,7 @@ function compileFileOrFiles (filename, isDirectory, cb) {
...
@@ -39,7 +53,7 @@ function compileFileOrFiles (filename, isDirectory, cb) {
],
function
(
err
,
result
)
{
],
function
(
err
,
result
)
{
let
errors
=
(
result
.
errors
||
[]).
filter
((
e
)
=>
e
.
type
===
'Error'
||
e
.
severity
===
'error'
)
let
errors
=
(
result
.
errors
||
[]).
filter
((
e
)
=>
e
.
type
===
'Error'
||
e
.
severity
===
'error'
)
if
(
errors
.
length
>
0
)
{
if
(
errors
.
length
>
0
)
{
console
.
dir
(
errors
)
signale
.
fatal
(
errors
)
return
cb
(
new
Error
(
'errors compiling'
))
return
cb
(
new
Error
(
'errors compiling'
))
}
}
cb
(
err
,
result
.
contracts
)
cb
(
err
,
result
.
contracts
)
...
@@ -50,7 +64,7 @@ function compileContractSources (sources, importFileCb, cb) {
...
@@ -50,7 +64,7 @@ function compileContractSources (sources, importFileCb, cb) {
let
compiler
,
filepath
let
compiler
,
filepath
if
(
!
sources
[
'remix_tests.sol'
])
{
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
([
async
.
waterfall
([
...
@@ -70,7 +84,7 @@ function compileContractSources (sources, importFileCb, cb) {
...
@@ -70,7 +84,7 @@ function compileContractSources (sources, importFileCb, cb) {
],
function
(
err
,
result
)
{
],
function
(
err
,
result
)
{
let
errors
=
(
result
.
errors
||
[]).
filter
((
e
)
=>
e
.
type
===
'Error'
||
e
.
severity
===
'error'
)
let
errors
=
(
result
.
errors
||
[]).
filter
((
e
)
=>
e
.
type
===
'Error'
||
e
.
severity
===
'error'
)
if
(
errors
.
length
>
0
)
{
if
(
errors
.
length
>
0
)
{
console
.
dir
(
errors
)
signale
.
fatal
(
errors
)
return
cb
(
new
Error
(
'errors compiling'
))
return
cb
(
new
Error
(
'errors compiling'
))
}
}
cb
(
err
,
result
.
contracts
)
cb
(
err
,
result
.
contracts
)
...
...
remix-tests/src/index.js
View file @
b36c6f02
const
async
=
require
(
'async'
)
const
async
=
require
(
'async'
)
const
path
=
require
(
'path'
)
const
path
=
require
(
'path'
)
const
fs
=
require
(
'fs'
)
const
fs
=
require
(
'fs'
)
const
{
Signale
}
=
require
(
'signale'
)
require
(
'colors'
)
require
(
'colors'
)
let
Compiler
=
require
(
'./compiler.js'
)
let
Compiler
=
require
(
'./compiler.js'
)
...
@@ -16,6 +17,28 @@ var createWeb3Provider = function () {
...
@@ -16,6 +17,28 @@ var createWeb3Provider = function () {
return
web3
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
)
{
var
runTestSources
=
function
(
contractSources
,
testCallback
,
resultCallback
,
finalCallback
,
importFileCb
)
{
async
.
waterfall
([
async
.
waterfall
([
function
compile
(
next
)
{
function
compile
(
next
)
{
...
@@ -134,11 +157,11 @@ var runTestFiles = function (filepath, isDirectory, web3) {
...
@@ -134,11 +157,11 @@ var runTestFiles = function (filepath, isDirectory, web3) {
var
testCallback
=
function
(
result
)
{
var
testCallback
=
function
(
result
)
{
if
(
result
.
type
===
'contract'
)
{
if
(
result
.
type
===
'contract'
)
{
console
.
log
(
'
\
n '
+
result
.
valu
e
)
signale
.
name
(
result
.
value
.
whit
e
)
}
else
if
(
result
.
type
===
'testPass'
)
{
}
else
if
(
result
.
type
===
'testPass'
)
{
console
.
log
(
'
\
t✓ '
.
green
.
bold
+
result
.
value
.
grey
)
signale
.
result
(
result
.
value
)
}
else
if
(
result
.
type
===
'testFailure'
)
{
}
else
if
(
result
.
type
===
'testFailure'
)
{
console
.
log
(
'
\
t✘ '
.
bold
.
red
+
result
.
value
.
red
)
signale
.
result
(
result
.
value
.
red
)
errors
.
push
(
result
)
errors
.
push
(
result
)
}
}
}
}
...
...
remix-tests/src/logger.js
0 → 100644
View file @
b36c6f02
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
}
remix-tests/src/run.js
View file @
b36c6f02
...
@@ -2,10 +2,37 @@ const commander = require('commander')
...
@@ -2,10 +2,37 @@ const commander = require('commander')
const
Web3
=
require
(
'web3'
)
const
Web3
=
require
(
'web3'
)
const
RemixTests
=
require
(
'./index.js'
)
const
RemixTests
=
require
(
'./index.js'
)
const
fs
=
require
(
'fs'
)
const
fs
=
require
(
'fs'
)
const
Provider
=
require
(
'remix-simulator'
).
Provider
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
)
{
// 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
()
let
web3
=
new
Web3
()
// web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
// web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
web3
.
setProvider
(
new
Provider
())
web3
.
setProvider
(
new
Provider
())
...
@@ -13,10 +40,11 @@ commander.action(function (filename) {
...
@@ -13,10 +40,11 @@ commander.action(function (filename) {
let
isDirectory
=
fs
.
lstatSync
(
filename
).
isDirectory
()
let
isDirectory
=
fs
.
lstatSync
(
filename
).
isDirectory
()
RemixTests
.
runTestFiles
(
filename
,
isDirectory
,
web3
)
RemixTests
.
runTestFiles
(
filename
,
isDirectory
,
web3
)
})
})
if
(
!
process
.
argv
.
slice
(
2
).
length
)
{
if
(
!
process
.
argv
.
slice
(
2
).
length
)
{
console
.
log
(
'please specify filename'
)
log
.
error
(
'Please specify a filename'
)
process
.
exit
()
}
}
commander
.
parse
(
process
.
argv
)
commander
.
parse
(
process
.
argv
)
remix-tests/tests/examples_1/simple_storage_test.sol
View file @
b36c6f02
pragma solidity ^0.4.7;
pragma solidity ^0.4.7;
import "remix_tests.sol";
import "./simple_storage.sol";
import "./simple_storage.sol";
contract MyTest {
contract MyTest {
...
@@ -29,4 +28,3 @@ contract MyTest {
...
@@ -29,4 +28,3 @@ contract MyTest {
}
}
}
}
remix-tests/tests/examples_2/simple_storage_test.sol
View file @
b36c6f02
pragma solidity ^0.4.7;
pragma solidity ^0.4.7;
import "./tests.sol";
import "./simple_storage.sol";
import "./simple_storage.sol";
contract MyTest {
contract MyTest {
...
@@ -25,4 +24,3 @@ contract MyTest {
...
@@ -25,4 +24,3 @@ contract MyTest {
}
}
}
}
remix-tests/tests/examples_3/simple_string_test.sol
View file @
b36c6f02
pragma solidity ^0.4.7;
pragma solidity ^0.4.7;
import "./tests.sol";
import "./simple_string.sol";
import "./simple_string.sol";
contract StringTest {
contract StringTest {
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment