text: 
  import expectThrow from './helpers/expectThrow';
  
  const HasNoTokens = artifacts.require('../contracts/lifecycle/HasNoTokens.sol');
  const ERC23TokenMock = artifacts.require('mocks/ERC23TokenMock.sol');
  
  contract('HasNoTokens', function (accounts) {
    let hasNoTokens = null;
    let token = null;
  
    beforeEach(async () => {
      // Create contract and token
      hasNoTokens = await HasNoTokens.new();
      token = await ERC23TokenMock.new(accounts[0], 100);
  
      // Force token into contract
      await token.transfer(hasNoTokens.address, 10);
      const startBalance = await token.balanceOf(hasNoTokens.address);
      assert.equal(startBalance, 10);
    });
  
    it('should not accept ERC23 tokens', async function () {
      await expectThrow(token.transferERC23(hasNoTokens.address, 10, ''));
    });
  
    it('should allow owner to reclaim tokens', async function () {
      const ownerStartBalance = await token.balanceOf(accounts[0]);
      await hasNoTokens.reclaimToken(token.address);
      const ownerFinalBalance = await token.balanceOf(accounts[0]);
      const finalBalance = await token.balanceOf(hasNoTokens.address);
      assert.equal(finalBalance, 0);
      assert.equal(ownerFinalBalance - ownerStartBalance, 10);
    });
  
    it('should allow only owner to reclaim tokens', async function () {
      await expectThrow(
        hasNoTokens.reclaimToken(token.address, { from: accounts[1] }),
      );
    });
  });
  