nimbus-eth1/tests/all_tests.nim

95 lines
2.7 KiB
Nim
Raw Normal View History

# Nimbus
# Copyright (c) 2018-2019 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed except according to those terms.
2019-09-21 05:45:23 +00:00
import macros, strutils, os, unittest, osproc
2019-10-16 14:40:14 +00:00
proc executeMyself(numModules: int): int =
2019-09-21 05:45:23 +00:00
let appName = getAppFilename()
for i in 0..<numModules:
2019-10-16 14:40:14 +00:00
result = result or execCmd(appName & " " & $i)
2019-09-21 05:45:23 +00:00
2019-09-24 03:29:41 +00:00
proc getImportStmt(stmtList: NimNode): NimNode =
result = stmtList[0]
result.expectKind nnkImportStmt
proc ofStmt(idx: int, singleModule: NimNode): NimNode =
# remove the "test_" prefix
let moduleName = normalize(singleModule.toStrLit.strVal).substr(4)
let moduleMain = newIdentNode(moduleName & "Main")
# construct `of` branch
# of idx: moduleMain()
result = nnkOfBranch.newTree(
newLit(idx),
newCall(moduleMain)
)
2019-09-21 05:45:23 +00:00
macro cliBuilder(stmtList: typed): untyped =
2019-09-24 03:29:41 +00:00
let importStmt = stmtList.getImportStmt
2019-09-21 05:45:23 +00:00
let moduleCount = importStmt.len
2019-09-24 03:29:41 +00:00
# case paramStr(1).parseInt
var caseStmt = nnkCaseStmt.newTree(
quote do: paramStr(1).parseInt
)
2019-09-21 05:45:23 +00:00
2019-09-24 03:29:41 +00:00
# of 0: codeStreamMain()
# of 1: gasMeterMain()
# of 2: memoryMain()
# ...
2019-09-21 05:45:23 +00:00
for idx, singleModule in importStmt:
2019-09-24 03:29:41 +00:00
caseStmt.add ofStmt(idx, singleModule)
# else:
# echo "invalid argument"
caseStmt.add nnkElse.newTree(
quote do: echo "invalid argument"
)
2019-09-21 05:45:23 +00:00
result = quote do:
if paramCount() == 0:
2019-10-16 14:40:14 +00:00
quit(executeMyself(`moduleCount`))
2019-09-21 05:45:23 +00:00
else:
disableParamFiltering()
`caseStmt`
# if you want to add new test module(s)
# make sure you define an entry poin
# e.g.
# proc mytestMain*() =
# # put anything you want here
# and then give it a name `test_mytest.nim`
2019-09-22 09:57:19 +00:00
# the `mytest` part should match between
# the proc name and the module name
2019-09-21 05:45:23 +00:00
# if this executable called without any params
2019-09-22 09:57:19 +00:00
# it will execute each of the test by executing itself
# repeatedly until all sub-tests are executed.
# you can execute the sub-test by a number start from zero.
2019-09-21 05:45:23 +00:00
cliBuilder:
import ./test_code_stream,
./test_gas_meter,
./test_memory,
./test_stack,
./test_genesis,
./test_vm_json,
./test_precompiles,
./test_generalstate_json,
./test_tracer_json,
./test_persistblock_json,
#./test_rpc, # it crash if we combine it here
./test_op_arith,
./test_op_bit,
./test_op_env,
./test_op_memory,
./test_op_misc,
./test_op_custom,
./test_state_db,
./test_difficulty,
./test_transaction_json