Commit 1125fde1 authored by yann300's avatar yann300

automate ui testing

parent e63f127b
......@@ -4,20 +4,39 @@ var fs = require('fs')
var solc = require('solc/wrapper')
var soljson = require('../soljson')
var compiler = solc(soljson)
var inputs = require('../test-browser/mockcompiler/requests.js')
var compilationResult = gatherCompilationResults(inputs)
replaceSolCompiler(compilationResult)
function gatherCompilationResults (sol) {
var compilationResult = {}
for (var k in sol) {
var item = sol[k]
var result = compile(item, 1)
compilationResult[result.key] = result
result = compile(item, 0)
compilationResult[result.key] = result
gatherCompilationResults(function (error, data) {
if (error) {
console.log(error)
process.exit(1)
} else {
replaceSolCompiler(data)
}
return compilationResult
})
function gatherCompilationResults (callback) {
var compilationResult = {}
fs.readdir('./test-browser/tests', 'utf8', function (error, data) {
if (error) {
console.log(error)
process.exit(1)
} else {
data.map(function (item, i) {
var testDef = require('../test-browser/tests/' + item)
for (var k in testDef) {
if (k === '@Sources') {
var source = testDef[k]()
var result = compile(source, 1)
compilationResult[result.key] = result
result = compile(source, 0)
compilationResult[result.key] = result
}
}
})
callback(null, compilationResult)
}
})
}
function compile (source, optimization) {
......
'use strict'
module.exports = {
checkCompiledContracts: function (browser, compiled, callback) {
browser.execute(function () {
var contracts = document.querySelectorAll('.udapp .contract')
var ret = []
for (var k in contracts) {
var el = contracts[k]
if (el.querySelector) {
ret.push({
name: el.querySelector('.title').innerText.replace(el.querySelector('.size').innerText, '').replace(/(\t)|(\r)|(\n)/g, '') // IE/firefox add \r\n
})
}
}
return ret
}, [''], function (result) {
browser.assert.equal(result.value.length, compiled.length)
result.value.map(function (item, i) {
browser.assert.equal(item.name, compiled[i])
checkCompiledContracts: checkCompiledContracts,
testContracts: testContracts
}
function checkCompiledContracts (browser, compiled, callback) {
browser.elements('css selector', '.udapp .contract .title', function (elements) {
console.log(JSON.stringify(elements))
elements.value.map(function (item, i) {
browser.elementIdText(item.ELEMENT, function (text) {
browser.assert.equal(text.value.split('\n')[0], compiled[i])
})
callback()
})
}
callback()
})
}
function testContracts (browser, contractCode, compiledContractNames, callback) {
browser
.clearValue('#input textarea')
.click('.newFile')
.setValue('#input textarea', contractCode, function () {})
.waitForElementPresent('.contract .create', 3000000)
checkCompiledContracts(browser, compiledContractNames, callback)
}
'use strict'
module.exports = {
'testSimpleContract': {
'sources': {
'Untitled': 'contract test1 {} contract test2 {}'
}
},
'ballot': {
'sources': {
'Untitled': `pragma solidity ^0.4.0
contract Ballot {
struct Voter {
uint weight
bool voted
uint8 vote
address delegate
}
struct Proposal {
uint voteCount
}
address chairperson
mapping(address => Voter) voters
Proposal[] proposals
/// Create a new ballot with $(_numProposals) different proposals.
function Ballot(uint8 _numProposals) {
chairperson = msg.sender
voters[chairperson].weight = 1
proposals.length = _numProposals
}
/// Give $(voter) the right to vote on this ballot.
/// May only be called by $(chairperson).
function giveRightToVote(address voter) {
if (msg.sender != chairperson || voters[voter].voted) return
voters[voter].weight = 1
}
/// Delegate your vote to the voter $(to).
function delegate(address to) {
Voter sender = voters[msg.sender] // assigns reference
if (sender.voted) return
while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender)
to = voters[to].delegate
if (to == msg.sender) return
sender.voted = true
sender.delegate = to
Voter delegate = voters[to]
if (delegate.voted)
proposals[delegate.vote].voteCount += sender.weight
else
delegate.weight += sender.weight
}
/// Give a single vote to proposal $(proposal).
function vote(uint8 proposal) {
Voter sender = voters[msg.sender]
if (sender.voted || proposal >= proposals.length) return
sender.voted = true
sender.vote = proposal
proposals[proposal].voteCount += sender.weight
}
function winningProposal() constant returns (uint8 winningProposal) {
uint256 winningVoteCount = 0
for (uint8 proposal = 0; proposal < proposals.length; proposal++)
if (proposals[proposal].voteCount > winningVoteCount) {
winningVoteCount = proposals[proposal].voteCount
winningProposal = proposal
}
}
}
`
}
}
}
'use strict'
var contractHelper = require('../helpers/contracts')
var examples = require('../../src/app/example-contracts')
var testData = require('../mockcompiler/requests')
// var contractHelper = require('../helpers/contracts')
var sources = {
'sources': {
'Untitled': examples.ballot.content
}
}
module.exports = {
'@Sources': function () {
return sources
},
'Ballot': function (browser) {
runTests(browser, testData)
runTests(browser)
}
}
......@@ -13,23 +21,7 @@ function runTests (browser, testData) {
browser
.url('http://127.0.0.1:8080/#version=builtin')
.waitForElementVisible('.newFile', 10000)
browser.assert.notEqual(testData, null)
// TODO add Ballot tests. -> setValue('#input textarea', ... ) is not working properly with that contract.
/*
testBallot(browser, testData.ballot.sources.Untitled, function () {
contractHelper.testContracts(browser, sources.sources.Untitled.replace(/(\n)/g, ' '), ['Ballot'], function () {
browser.end()
});
*/
}
/*
function testBallot (browser, contract, callback) {
browser
.click('.newFile')
.clearValue('#input textarea')
.setValue('#input textarea', contract, function () {
browser.pause('10000')
contractHelper.checkCompiledContracts(browser, ['Ballot'], callback)
})
})
}
*/
'use strict'
var testData = require('../mockcompiler/requests')
var contractHelper = require('../helpers/contracts')
var sources = {
'sources': {
'Untitled': 'contract test1 {} contract test2 {}'
}
}
module.exports = {
'@Sources': function () {
return sources
},
'Simple Contract': function (browser) {
runTests(browser, testData)
runTests(browser)
}
}
function runTests (browser, testData) {
function runTests (browser) {
browser
.url('http://127.0.0.1:8080/#version=builtin')
.waitForElementVisible('.newFile', 10000)
browser.assert.notEqual(testData, null)
testSimpleContract(browser, testData.testSimpleContract.sources.Untitled, function () {
contractHelper.testContracts(browser, sources.sources.Untitled, ['test1', 'test2'], function () {
browser.end()
})
}
function testSimpleContract (browser, contract, callback) {
browser
.click('.newFile')
.clearValue('#input textarea')
.setValue('#input textarea', contract)
.pause('5000')
contractHelper.checkCompiledContracts(browser, ['test1', 'test2'], callback)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment