2018-04-18 20:32:51 +00:00
|
|
|
/*globals describe, it*/
|
|
|
|
const File = require('../lib/core/file');
|
|
|
|
const fs = require('fs-extra');
|
2018-04-19 19:13:41 +00:00
|
|
|
const path = require('path');
|
|
|
|
const assert = require('assert');
|
|
|
|
const sinon = require('sinon');
|
2018-04-18 20:32:51 +00:00
|
|
|
|
|
|
|
describe('embark.File', function () {
|
|
|
|
describe('parseFileForImport', () => {
|
2018-04-19 17:29:25 +00:00
|
|
|
it('should find all the imports', function (done) {
|
2018-04-19 19:13:41 +00:00
|
|
|
const contract = fs.readFileSync('./test/contracts/contract_with_import.sol').toString();
|
2018-04-19 17:29:25 +00:00
|
|
|
const file = new File({filename: '.embark/contracts/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol',
|
2018-04-19 14:05:11 +00:00
|
|
|
path: 'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/simple_storage.sol'});
|
2018-04-19 19:13:41 +00:00
|
|
|
const downloadFileStub = sinon.stub(file, 'downloadFile')
|
|
|
|
.callsFake((path, url, cb) => {
|
|
|
|
cb();
|
|
|
|
});
|
|
|
|
|
2018-04-20 13:52:13 +00:00
|
|
|
file.parseFileForImport(contract, true, () => {
|
2018-04-19 19:13:41 +00:00
|
|
|
assert.strictEqual(downloadFileStub.callCount, 1);
|
|
|
|
assert.strictEqual(downloadFileStub.firstCall.args[0],
|
|
|
|
path.normalize('.embark/contracts/embark-framework/embark/master/test_app/app/contracts/ownable.sol'));
|
|
|
|
assert.strictEqual(downloadFileStub.firstCall.args[1],
|
|
|
|
'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/./ownable.sol');
|
2018-04-19 17:29:25 +00:00
|
|
|
done();
|
|
|
|
});
|
2018-04-18 20:32:51 +00:00
|
|
|
});
|
2018-04-20 13:52:13 +00:00
|
|
|
|
|
|
|
it('should find all the imports but not call download because not a http contract', function (done) {
|
|
|
|
const contract = fs.readFileSync('./test/contracts/contract_with_import.sol').toString();
|
|
|
|
const file = new File({filename: '.embark/contracts/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol',
|
|
|
|
path: 'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/simple_storage.sol'});
|
|
|
|
const downloadFileStub = sinon.stub(file, 'downloadFile')
|
|
|
|
.callsFake((path, url, cb) => {
|
|
|
|
cb();
|
|
|
|
});
|
|
|
|
|
|
|
|
file.parseFileForImport(contract, () => {
|
|
|
|
assert.strictEqual(downloadFileStub.callCount, 0);
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should find all the imports and call downlaod because it is an http import', function (done) {
|
|
|
|
const contract = fs.readFileSync('./test/contracts/contract_with_http_import.sol').toString();
|
|
|
|
const file = new File({filename: '.embark/contracts/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol',
|
|
|
|
path: 'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/simple_storage.sol'});
|
|
|
|
const downloadFileStub = sinon.stub(file, 'downloadFile')
|
|
|
|
.callsFake((path, url, cb) => {
|
|
|
|
cb();
|
|
|
|
});
|
|
|
|
|
|
|
|
file.parseFileForImport(contract, () => {
|
|
|
|
assert.strictEqual(downloadFileStub.callCount, 1);
|
|
|
|
assert.strictEqual(downloadFileStub.firstCall.args[0],
|
|
|
|
'.embark/contracts/embark-framework/embark/develop/test_apps/contracts_app/contracts/contract_args.sol');
|
|
|
|
assert.strictEqual(downloadFileStub.firstCall.args[1],
|
|
|
|
'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/contracts_app/contracts/contract_args.sol');
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
2018-04-20 14:03:03 +00:00
|
|
|
|
|
|
|
it('should find all the imports but only once if called twice', function (done) {
|
|
|
|
const contract = fs.readFileSync('./test/contracts/contract_with_http_import.sol').toString();
|
|
|
|
const file = new File({filename: '.embark/contracts/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol',
|
|
|
|
path: 'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/test_app/app/contracts/simple_storage.sol'});
|
|
|
|
const downloadFileStub = sinon.stub(file, 'downloadFile')
|
|
|
|
.callsFake((path, url, cb) => {
|
|
|
|
cb();
|
|
|
|
});
|
|
|
|
|
|
|
|
file.parseFileForImport(contract, () => {
|
|
|
|
// Parse again
|
|
|
|
file.parseFileForImport(contract, () => {
|
|
|
|
assert.strictEqual(downloadFileStub.callCount, 1);
|
|
|
|
assert.strictEqual(downloadFileStub.firstCall.args[0],
|
|
|
|
'.embark/contracts/embark-framework/embark/develop/test_apps/contracts_app/contracts/contract_args.sol');
|
|
|
|
assert.strictEqual(downloadFileStub.firstCall.args[1],
|
|
|
|
'https://raw.githubusercontent.com/embark-framework/embark/develop/test_apps/contracts_app/contracts/contract_args.sol');
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2018-04-18 20:32:51 +00:00
|
|
|
});
|
|
|
|
});
|