remix-project mirror
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
remix-project/remix-tests
yann300 040d15ca0b Merge pull request #933 from ethereum/fix_invalid_dir 6 years ago
..
bin move to directory in preparation to move the repo 6 years ago
examples path runTestFiles for injecting import statements, update readme 6 years ago
sol rename to number test. Add 2^3 = 8 combinations of uint & int tests. 6 years ago
src display error & exit if passed filepath is invalid 6 years ago
tests rename to number test. Add 2^3 = 8 combinations of uint & int tests. 6 years ago
LICENSE.md move to directory in preparation to move the repo 6 years ago
README.md Update remix-tests readme 6 years ago
package.json Publish 6 years ago

README.md

Build Status

Remix-Tests

Tests for the Ethereum tool suite Remix

Installation

npm -g install remix-tests

Test structure

Example test file:

pragma solidity ^0.4.7;
import "remix_tests.sol"; // injected by remix-tests
import "./simple_storage.sol";

contract MyTest {
  SimpleStorage foo;
  uint i = 0;

  function beforeAll() {
    foo = new SimpleStorage();
  }

  function beforeEach() {
    if (i == 1) {
      foo.set(200);
    }
    i += 1;
  }

  function initialValueShouldBe100() public {
    Assert.equal(foo.get(), 100, "initial value is not correct");
  }

  function initialValueShouldBe200() public constant returns {
    return Assert.equal(foo.get(), 200, "initial value is not correct");
  }

}

Available special functions:

  • beforeEach() - runs before each test
  • beforeAll() - runs before all tests

Assert library

Available functions Supported types
Assert.ok() bool
Assert.equal() uint, int, bool, address, bytes32, string
Assert.notEqual() uint, int, bool, address, bytes32, string
Assert.greaterThan() uint, int
Assert.lesserThan() uint, int

Command Line

Remix-Tests will assume the tests will files whose name end with "_test.sol". e.g simple_storage_test.sol

Usage:

  • A directory with tests files remix-tests examples/
  • A test file remix-tests examples/simple_storage_test.sol

Library

Importing the library:

const RemixTests = require('remix-tests');

Running a single test object:

remixTests.runTest(contractName, contractObj, testCallback, resultsCallback)

params: testName - string name of the test testObj - web3.js 1.0 contract instance of the test testCallback(object) - called each time there is a test event. 3 possible type of objects:

  • { type: 'contract', value: '<TestName>', filename: '<test_filename.sol>' }
  • { type: 'testPass', value: '<name of testing function>', time: <time taken>, context: '<TestName>'}
  • { type: 'testFailure', value: '<name of testing function>', time: <time taken>, context: '<TestName>', errMsg: '<message in the Assert>' }

resultsCallback(object)

  • passingNum - number of passing tests
  • failureNum - number of failing tests
  • timePassed - time it took for all the tests to run (in seconds)

Running a set of tests given the sourcecode:

remixTests.runTestSources(contractSources, testCallback, resultCallback, finalCallback, importFileCb);

params: contractSources - object -> filename => { content: source } testCallback(object) - called each time there is a test event. 3 possible type of objects:

  • { type: 'contract', value: '<TestName>', filename: '<test_filename.sol>' }
  • { type: 'testPass', value: '<name of testing function>', time: <time taken>, context: '<TestName>'}
  • { type: 'testFailure', value: '<name of testing function>', time: <time taken>, context: '<TestName>', errMsg: '<message in the Assert>' }

resultCallback(err, object)

  • passingNum - number of passing tests
  • failureNum - number of failing tests
  • timePassed - time it took for all the tests to run (in seconds)

finalCallback(err) - called when all tests finish running. importCb(url, cb)

Contribute

Please feel free! Open an issue or a pull request. Please conform to standard for code styles, and make sure that you add any relevant tests.

License

MIT © 2018 Remix Team