parent
ed515ddadf
commit
9eb17cd4a5
@ -1,94 +0,0 @@ |
|||||||
const axios = require('axios') |
|
||||||
const path = require('path') |
|
||||||
const fs = require('fs') |
|
||||||
|
|
||||||
const handleGithubCall = async function (fullpath, repoPath, path, filename, fileRoot) { |
|
||||||
const data = await axios({ |
|
||||||
method: 'get', |
|
||||||
url: 'https://api.github.com/repos/' + repoPath + '/contents/' + path, |
|
||||||
responseType: 'json' |
|
||||||
}).then(function (response) { |
|
||||||
if ('content' in response.data) { |
|
||||||
const buf = Buffer.from(response.data.content, 'base64') |
|
||||||
fileRoot = fullpath.substring(0, fullpath.lastIndexOf('/')) |
|
||||||
fileRoot = fileRoot + '/' |
|
||||||
const resp = { filename, content: buf.toString('UTF-8'), fileRoot } |
|
||||||
return resp |
|
||||||
} else { |
|
||||||
throw Error('Content not received!') |
|
||||||
} |
|
||||||
}) |
|
||||||
return data |
|
||||||
} |
|
||||||
const handleNodeModulesImport = async function (pathString, filename, fileRoot) { |
|
||||||
const o = { encoding: 'UTF-8' } |
|
||||||
var modulesDir = fileRoot |
|
||||||
|
|
||||||
while (true) { |
|
||||||
var p = path.join(modulesDir, 'node_modules', pathString, filename) |
|
||||||
try { |
|
||||||
const content = fs.readFileSync(p, o) |
|
||||||
fileRoot = path.join(modulesDir, 'node_modules', pathString) |
|
||||||
const response = { filename, content, fileRoot } |
|
||||||
return response |
|
||||||
} catch (err) { |
|
||||||
console.log(err) |
|
||||||
} |
|
||||||
|
|
||||||
// Recurse outwards until impossible
|
|
||||||
var oldModulesDir = modulesDir |
|
||||||
modulesDir = path.join(modulesDir, '..') |
|
||||||
if (modulesDir === oldModulesDir) { |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
const handleLocalImport = async function (pathString, filename, fileRoot) { |
|
||||||
// if no relative/absolute path given then search in node_modules folder
|
|
||||||
if (pathString && pathString.indexOf('.') !== 0 && pathString.indexOf('/') !== 0) { |
|
||||||
return handleNodeModulesImport(pathString, filename, fileRoot) |
|
||||||
} else { |
|
||||||
const o = { encoding: 'UTF-8' } |
|
||||||
const p = pathString ? path.resolve(fileRoot, pathString, filename) : path.resolve(fileRoot, filename) |
|
||||||
const content = fs.readFileSync(p, o) |
|
||||||
fileRoot = pathString ? path.resolve(fileRoot, pathString) : fileRoot |
|
||||||
const response = { filename, content, fileRoot } |
|
||||||
return response |
|
||||||
} |
|
||||||
} |
|
||||||
const getHandlers = async function () { |
|
||||||
return [ |
|
||||||
{ |
|
||||||
type: 'local', |
|
||||||
match: /(^(?!(?:http:\/\/)|(?:https:\/\/)?(?:www.)?(?:github.com)))(^\/*[\w+-_/]*\/)*?(\w+\.sol)/g, |
|
||||||
handle: async (match, fileRoot) => { const data = await handleLocalImport(match[2], match[3], fileRoot); return data } |
|
||||||
}, |
|
||||||
{ |
|
||||||
type: 'github', |
|
||||||
match: /^(https?:\/\/)?(www.)?github.com\/([^/]*\/[^/]*)(.*\/(\w+\.sol))/g, |
|
||||||
handle: async (match, fileRoot) => { |
|
||||||
const data = await handleGithubCall(match[0], match[3], match[4], match[5], fileRoot) |
|
||||||
return data |
|
||||||
} |
|
||||||
} |
|
||||||
] |
|
||||||
} |
|
||||||
const resolveImports = async function (fileRoot, sourcePath) { |
|
||||||
const handlers = await getHandlers() |
|
||||||
let response = {} |
|
||||||
for (const handler of handlers) { |
|
||||||
try { |
|
||||||
// here we are trying to find type of import path github/swarm/ipfs/local
|
|
||||||
const match = handler.match.exec(sourcePath) |
|
||||||
if (match) { |
|
||||||
response = await handler.handle(match, fileRoot) |
|
||||||
break |
|
||||||
} |
|
||||||
} catch (e) { |
|
||||||
throw e |
|
||||||
} |
|
||||||
} |
|
||||||
return response |
|
||||||
} |
|
||||||
|
|
||||||
module.exports = { resolveImports } |
|
@ -0,0 +1,37 @@ |
|||||||
|
const rr = require('../src/index.js') |
||||||
|
const assert = require('assert') |
||||||
|
const fs = require('fs') |
||||||
|
|
||||||
|
describe('testRunner', function () { |
||||||
|
describe('#combineSource', function() { |
||||||
|
describe('test with beforeAll', function () { |
||||||
|
let filename = 'tests/examples_1/greeter.sol' |
||||||
|
let tests = [], results = {} |
||||||
|
|
||||||
|
before(function (done) { |
||||||
|
const content = fs.readFileSync('../remix-resolve/tests/example_1/greeter.sol') |
||||||
|
var sources = [] |
||||||
|
sources['greeter.sol'] = content |
||||||
|
rr.combineSource('/home/0mkar/Karma/remix/remix-resolve/tests/example_1/greeter.sol', sources) |
||||||
|
}) |
||||||
|
|
||||||
|
it('should 1 passing test', function () { |
||||||
|
assert.equal(results.passingNum, 2) |
||||||
|
}) |
||||||
|
|
||||||
|
it('should 1 failing test', function () { |
||||||
|
assert.equal(results.failureNum, 2) |
||||||
|
}) |
||||||
|
|
||||||
|
it('should returns 5 messages', function () { |
||||||
|
assert.deepEqual(tests, [ |
||||||
|
{ type: 'contract', value: 'MyTest', filename: 'simple_storage_test.sol' }, |
||||||
|
{ type: 'testFailure', value: 'Should trigger one fail', time: 1, context: 'MyTest', errMsg: 'the test 1 fails' }, |
||||||
|
{ type: 'testPass', value: 'Should trigger one pass', time: 1, context: 'MyTest'}, |
||||||
|
{ type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' }, |
||||||
|
{ type: 'testFailure', value: 'Initial value should be200', time: 1, context: 'MyTest', errMsg: 'function returned false' } |
||||||
|
]) |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
Loading…
Reference in new issue