diff options
author | Fabio Berger <me@fabioberger.com> | 2018-05-11 18:32:57 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-05-11 18:32:57 +0800 |
commit | d370296e82c11d67bbb16a1dc73432c3625682aa (patch) | |
tree | c8e5d440bc2b78feae89644c11ba3ed778da6015 /packages/sol-compiler/test/compiler_utils_test.ts | |
parent | f78b5741c3ba3495c066dc800ce62d8a1f3fb75f (diff) | |
parent | f42f608f3f97a5244f09f17ae5ee184c0f775de3 (diff) | |
download | dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.tar dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.tar.gz dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.tar.bz2 dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.tar.lz dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.tar.xz dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.tar.zst dexon-sol-tools-d370296e82c11d67bbb16a1dc73432c3625682aa.zip |
Merge branch 'development' into breakUp0xjs
* development:
Fix ganache subprovider config
Fix a bug in compiler config precedence
Fix linter errors
Fix templates
Remove unused deployer docs configs
Add a legacy endpoint for the deployer
Add a check for compiler output
Add a comment
Put ARTIFACTS_VERSION in a config
Improve a comment
Remove _applyDefaultsToDeployTxDataAsync
Add a HACK comment
Fix linter issues
Rename deployer to sol-compiler
Remove deployer
Remove deployer from 0x.js and migrations
Configure migrations with a compiler.json
Remove deployer from metacoin and contract tests
Update wallet footer and add remove token functionality
# Conflicts:
# .gitignore
# packages/0x.js/package.json
# packages/0x.js/src/0x.ts
# packages/contracts/package.json
# packages/contracts/test/multi_sig_with_time_lock.ts
# packages/contracts/test/multi_sig_with_time_lock_except_remove_auth_addr.ts
# packages/contracts/util/artifacts.ts
# packages/deployer/test/deployer_test.ts
# packages/migrations/package.json
Diffstat (limited to 'packages/sol-compiler/test/compiler_utils_test.ts')
-rw-r--r-- | packages/sol-compiler/test/compiler_utils_test.ts | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/packages/sol-compiler/test/compiler_utils_test.ts b/packages/sol-compiler/test/compiler_utils_test.ts new file mode 100644 index 000000000..4fe7b994e --- /dev/null +++ b/packages/sol-compiler/test/compiler_utils_test.ts @@ -0,0 +1,83 @@ +import * as chai from 'chai'; +import * as dirtyChai from 'dirty-chai'; +import * as _ from 'lodash'; +import 'mocha'; + +import { + createDirIfDoesNotExistAsync, + getNormalizedErrMsg, + parseDependencies, + parseSolidityVersionRange, +} from '../src/utils/compiler'; +import { fsWrapper } from '../src/utils/fs_wrapper'; + +chai.use(dirtyChai); +const expect = chai.expect; + +describe('Compiler utils', () => { + describe('#getNormalizedErrorMessage', () => { + it('normalizes the error message', () => { + const errMsg = 'base/Token.sol:6:46: Warning: Unused local variable'; + const normalizedErrMsg = getNormalizedErrMsg(errMsg); + expect(normalizedErrMsg).to.be.equal('Token.sol:6:46: Warning: Unused local variable'); + }); + }); + describe('#createDirIfDoesNotExistAsync', () => { + it('creates artifacts dir', async () => { + const artifactsDir = `${__dirname}/artifacts`; + expect(fsWrapper.doesPathExistSync(artifactsDir)).to.be.false(); + await createDirIfDoesNotExistAsync(artifactsDir); + expect(fsWrapper.doesPathExistSync(artifactsDir)).to.be.true(); + fsWrapper.rmdirSync(artifactsDir); + expect(fsWrapper.doesPathExistSync(artifactsDir)).to.be.false(); + }); + }); + describe('#parseSolidityVersionRange', () => { + it('correctly parses the version range', () => { + expect(parseSolidityVersionRange('pragma solidity ^0.0.1;')).to.be.equal('^0.0.1'); + expect(parseSolidityVersionRange('\npragma solidity 0.0.1;')).to.be.equal('0.0.1'); + expect(parseSolidityVersionRange('pragma solidity <=1.0.1;')).to.be.equal('<=1.0.1'); + expect(parseSolidityVersionRange('pragma solidity ~1.0.1;')).to.be.equal('~1.0.1'); + }); + // TODO: For now that doesn't work. This will work after we switch to a grammar-based parser + it.skip('correctly parses the version range with comments', () => { + expect(parseSolidityVersionRange('// pragma solidity ~1.0.1;\npragma solidity ~1.0.2;')).to.be.equal( + '~1.0.2', + ); + }); + }); + describe('#parseDependencies', () => { + it('correctly parses Exchange dependencies', async () => { + const path = `${__dirname}/fixtures/contracts/Exchange.sol`; + const source = await fsWrapper.readFileAsync(path, { + encoding: 'utf8', + }); + const dependencies = parseDependencies({ source, path }); + const expectedDependencies = [ + 'zeppelin-solidity/contracts/token/ERC20/ERC20.sol', + 'packages/sol-compiler/lib/test/fixtures/contracts/TokenTransferProxy.sol', + 'packages/sol-compiler/lib/test/fixtures/contracts/base/SafeMath.sol', + ]; + _.each(expectedDependencies, expectedDepdency => { + const foundDependency = _.find(dependencies, dependency => _.endsWith(dependency, expectedDepdency)); + expect(foundDependency, `${expectedDepdency} not found`).to.not.be.undefined(); + }); + }); + it('correctly parses TokenTransferProxy dependencies', async () => { + const path = `${__dirname}/fixtures/contracts/TokenTransferProxy.sol`; + const source = await fsWrapper.readFileAsync(path, { + encoding: 'utf8', + }); + expect(parseDependencies({ source, path })).to.be.deep.equal([ + 'zeppelin-solidity/contracts/ownership/Ownable.sol', + 'zeppelin-solidity/contracts/token/ERC20/ERC20.sol', + ]); + }); + // TODO: For now that doesn't work. This will work after we switch to a grammar-based parser + it.skip('correctly parses commented out dependencies', async () => { + const path = ''; + const source = `// import "./TokenTransferProxy.sol";`; + expect(parseDependencies({ path, source })).to.be.deep.equal([]); + }); + }); +}); |