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