add generate test file

pull/1/head
yann300 6 years ago
parent b84110da51
commit 010c990316
  1. 4
      src/app/tabs/styles/test-tab-styles.js
  2. 59
      src/app/tabs/test-tab.js
  3. 6
      src/app/ui/styles-guide/style-guide.js
  4. 9
      src/lib/helper.js

@ -49,6 +49,10 @@ var css = csjs`
.runButton { .runButton {
${styles.rightPanel.testTab.button_runTests}; ${styles.rightPanel.testTab.button_runTests};
} }
.generateTestFile {
${styles.rightPanel.testTab.button_generateTestFile};
min-width: 100px
}
` `
module.exports = css module.exports = css

@ -1,5 +1,7 @@
var yo = require('yo-yo') var yo = require('yo-yo')
var async = require('async') var async = require('async')
var helper = require('../../lib/helper.js')
var modalDialogCustom = require('../ui/modal-dialog-custom')
var globalRegistry = require('../../global/registry') var globalRegistry = require('../../global/registry')
var css = require('./styles/test-tab-styles') var css = require('./styles/test-tab-styles')
var remixTests = require('remix-tests') var remixTests = require('remix-tests')
@ -129,12 +131,29 @@ module.exports = class TestTab {
async.eachOfSeries(tests, (value, key, callback) => { runTest(value, callback) }) async.eachOfSeries(tests, (value, key, callback) => { runTest(value, callback) })
} }
var generateTestFile = function () {
var fileManager = self._deps.fileManager
var path = fileManager.currentPath()
var fileProvider = fileManager.fileProviderOf(path)
if (fileProvider) {
helper.createNonClashingNameWithPrefix(path + '/test.sol', fileProvider, '_test', (error, newFile) => {
if (error) return modalDialogCustom.alert('Failed to create file. ' + newFile + ' ' + error)
if (!fileProvider.set(newFile, testContractSample)) {
modalDialogCustom.alert('Failed to create test file ' + newFile)
} else {
fileManager.switchFile(newFile)
}
})
}
}
var el = yo` var el = yo`
<div class="${css.testTabView}" id="testView"> <div class="${css.testTabView}" id="testView">
<div class="${css.infoBox}"> <div class="${css.infoBox}">
Test your smart contract by creating a foo_test.sol file. Test your smart contract by creating a foo_test.sol file.
Open ballot_test.sol to see the example. For more details, see Open ballot_test.sol to see the example. For more details, see
How to test smart contracts guide in our documentation. How to test smart contracts guide in our documentation.
<div class=${css.generateTestFile} onclick=${generateTestFile}>Generate test file</div>
</div> </div>
<div class="${css.tests}"> <div class="${css.tests}">
<div class=${css.testList}>${listTests()}</div> <div class=${css.testList}>${listTests()}</div>
@ -150,3 +169,43 @@ module.exports = class TestTab {
return el return el
} }
} }
var testContractSample = `pragma solidity ^0.4.0;
import "remix_tests.sol"; // this import is automatically injected by Remix.
// file name has to end with '_test.sol'
contract test_1 {
function beforeAll () {
// here should instanciate tested contract
}
function check1 () public {
// this function is not constant, use 'Assert' to test the contract
Assert.equal(uint(2), uint(1), "error message");
Assert.equal(uint(2), uint(2), "error message");
}
function check2 () public constant returns (bool) {
// this function is constant, use the return value (true or false) to test the contract
return true;
}
}
contract test_2 {
function beforeAll () {
// here should instanciate tested contract
}
function check1 () public {
// this function is not constant, use 'Assert' to test the contract
Assert.equal(uint(2), uint(1), "error message");
Assert.equal(uint(2), uint(2), "error message");
}
function check2 () public constant returns (bool) {
// this function is constant, use the return value (true or false) to test the contract
return true;
}
}`

@ -670,6 +670,12 @@ function styleGuide () {
Color: appProperties.primaryButton_TextColor Color: appProperties.primaryButton_TextColor
}), }),
button_generateTestFile: appProperties.uiElements.button({
BackgroundColor: appProperties.primaryButton_BackgroundColor,
BorderColor: appProperties.primaryButton_BorderColor,
Color: appProperties.primaryButton_TextColor
}),
color_testPass: appProperties.success_BackgroundColor, color_testPass: appProperties.success_BackgroundColor,
color_testFail: appProperties.danger_BackgroundColor color_testFail: appProperties.danger_BackgroundColor
}, },

@ -11,7 +11,7 @@ module.exports = {
var len = data.length var len = data.length
return data.slice(0, 5) + '...' + data.slice(len - 5, len) return data.slice(0, 5) + '...' + data.slice(len - 5, len)
}, },
createNonClashingName (name, fileProvider, cb) { createNonClashingNameWithPrefix (name, fileProvider, prefix, cb) {
var counter = '' var counter = ''
var ext = 'sol' var ext = 'sol'
var reg = /(.*)\.([^.]+)/g var reg = /(.*)\.([^.]+)/g
@ -24,7 +24,7 @@ module.exports = {
async.whilst( async.whilst(
() => { return exist }, () => { return exist },
(callback) => { (callback) => {
fileProvider.exists(name + counter + '.' + ext, (error, currentExist) => { fileProvider.exists(name + counter + prefix + '.' + ext, (error, currentExist) => {
if (error) { if (error) {
callback(error) callback(error)
} else { } else {
@ -34,9 +34,12 @@ module.exports = {
} }
}) })
}, },
(error) => { cb(error, name + counter + '.' + ext) } (error) => { cb(error, name + counter + prefix + '.' + ext) }
) )
}, },
createNonClashingName (name, fileProvider, cb) {
this.createNonClashingNameWithPrefix(name, fileProvider, '', cb)
},
checkSpecialChars (name) { checkSpecialChars (name) {
return name.match(/[/:*?"<>\\'|]/) != null return name.match(/[/:*?"<>\\'|]/) != null
}, },

Loading…
Cancel
Save