12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- const { shouldFail, singletons } = require('openzeppelin-test-helpers');
- const { bufferToHex, keccak256 } = require('ethereumjs-util');
- const ERC1820ImplementerMock = artifacts.require('ERC1820ImplementerMock');
- contract('ERC1820Implementer', function ([_, registryFunder, implementee, anyone]) {
- const ERC1820_ACCEPT_MAGIC = bufferToHex(keccak256('ERC1820_ACCEPT_MAGIC'));
- beforeEach(async function () {
- this.implementer = await ERC1820ImplementerMock.new();
- this.registry = await singletons.ERC1820Registry(registryFunder);
- this.interfaceA = bufferToHex(keccak256('interfaceA'));
- this.interfaceB = bufferToHex(keccak256('interfaceB'));
- });
- context('with no registered interfaces', function () {
- it('returns false when interface implementation is queried', async function () {
- (await this.implementer.canImplementInterfaceForAddress(this.interfaceA, implementee))
- .should.not.equal(ERC1820_ACCEPT_MAGIC);
- });
- it('reverts when attempting to set as implementer in the registry', async function () {
- await shouldFail.reverting(
- this.registry.setInterfaceImplementer(
- implementee, this.interfaceA, this.implementer.address, { from: implementee }
- )
- );
- });
- });
- context('with registered interfaces', function () {
- beforeEach(async function () {
- await this.implementer.registerInterfaceForAddress(this.interfaceA, implementee);
- });
- it('returns true when interface implementation is queried', async function () {
- (await this.implementer.canImplementInterfaceForAddress(this.interfaceA, implementee))
- .should.equal(ERC1820_ACCEPT_MAGIC);
- });
- it('returns false when interface implementation for non-supported interfaces is queried', async function () {
- (await this.implementer.canImplementInterfaceForAddress(this.interfaceB, implementee))
- .should.not.equal(ERC1820_ACCEPT_MAGIC);
- });
- it('returns false when interface implementation for non-supported addresses is queried', async function () {
- (await this.implementer.canImplementInterfaceForAddress(this.interfaceA, anyone))
- .should.not.equal(ERC1820_ACCEPT_MAGIC);
- });
- it('can be set as an implementer for supported interfaces in the registry', async function () {
- await this.registry.setInterfaceImplementer(
- implementee, this.interfaceA, this.implementer.address, { from: implementee }
- );
- (await this.registry.getInterfaceImplementer(implementee, this.interfaceA))
- .should.equal(this.implementer.address);
- });
- });
- });
|