123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- const { constants, BN } = require('@openzeppelin/test-helpers');
- const { expect } = require('chai');
- const StorageSlotMock = artifacts.require('StorageSlotMock');
- const slot = web3.utils.keccak256('some.storage.slot');
- const otherSlot = web3.utils.keccak256('some.other.storage.slot');
- contract('StorageSlot', function (accounts) {
- beforeEach(async function () {
- this.store = await StorageSlotMock.new();
- });
- describe('boolean storage slot', function () {
- beforeEach(async function () {
- this.value = true;
- });
- it('set', async function () {
- await this.store.setBoolean(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setBoolean(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.getBoolean(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.getBoolean(otherSlot)).to.be.equal(false);
- });
- });
- });
- describe('address storage slot', function () {
- beforeEach(async function () {
- this.value = accounts[1];
- });
- it('set', async function () {
- await this.store.setAddress(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setAddress(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.getAddress(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.getAddress(otherSlot)).to.be.equal(constants.ZERO_ADDRESS);
- });
- });
- });
- describe('bytes32 storage slot', function () {
- beforeEach(async function () {
- this.value = web3.utils.keccak256('some byte32 value');
- });
- it('set', async function () {
- await this.store.setBytes32(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setBytes32(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.getBytes32(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.getBytes32(otherSlot)).to.be.equal(constants.ZERO_BYTES32);
- });
- });
- });
- describe('uint256 storage slot', function () {
- beforeEach(async function () {
- this.value = new BN(1742);
- });
- it('set', async function () {
- await this.store.setUint256(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setUint256(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.getUint256(slot)).to.be.bignumber.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.getUint256(otherSlot)).to.be.bignumber.equal('0');
- });
- });
- });
- describe('string storage slot', function () {
- beforeEach(async function () {
- this.value = 'lorem ipsum';
- });
- it('set', async function () {
- await this.store.setString(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setString(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.getString(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.getString(otherSlot)).to.be.equal('');
- });
- });
- });
- describe('string storage pointer', function () {
- beforeEach(async function () {
- this.value = 'lorem ipsum';
- });
- it('set', async function () {
- await this.store.setStringStorage(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setStringStorage(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.stringMap(slot)).to.be.equal(this.value);
- expect(await this.store.getStringStorage(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.stringMap(otherSlot)).to.be.equal('');
- expect(await this.store.getStringStorage(otherSlot)).to.be.equal('');
- });
- });
- });
- describe('bytes storage slot', function () {
- beforeEach(async function () {
- this.value = web3.utils.randomHex(128);
- });
- it('set', async function () {
- await this.store.setBytes(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setBytes(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.getBytes(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.getBytes(otherSlot)).to.be.equal(null);
- });
- });
- });
- describe('bytes storage pointer', function () {
- beforeEach(async function () {
- this.value = web3.utils.randomHex(128);
- });
- it('set', async function () {
- await this.store.setBytesStorage(slot, this.value);
- });
- describe('get', function () {
- beforeEach(async function () {
- await this.store.setBytesStorage(slot, this.value);
- });
- it('from right slot', async function () {
- expect(await this.store.bytesMap(slot)).to.be.equal(this.value);
- expect(await this.store.getBytesStorage(slot)).to.be.equal(this.value);
- });
- it('from other slot', async function () {
- expect(await this.store.bytesMap(otherSlot)).to.be.equal(null);
- expect(await this.store.getBytesStorage(otherSlot)).to.be.equal(null);
- });
- });
- });
- });
|