uniswap-v2-contracts/test/UniswapV2Factory.t.sol
Uncle Fatso c3e0d54be4
additional tests added and extra mocks added
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
2025-05-17 16:07:39 +03:00

100 lines
3.8 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity =0.8.20;
import {Test} from "forge-std/Test.sol";
import "../src/UniswapV2Factory.sol";
import "../src/UniswapV2Pair.sol";
import "../src/mock/MockERC20.sol";
import "../src/libraries/UniswapV2Library.sol";
contract UniswapV2FactoryTest is Test {
UniswapV2Factory public factory;
MockERC20 public token0;
MockERC20 public token1;
MockERC20 public token2;
MockERC20 public token3;
function setUp() public {
factory = new UniswapV2Factory(address(0));
token0 = new MockERC20("SomeToken0", "ST0", 18);
token1 = new MockERC20("SomeToken1", "ST1", 18);
token2 = new MockERC20("SomeToken2", "ST2", 9);
token3 = new MockERC20("SomeToken3", "ST3", 6);
}
function testCreatePair() public {
address tokenPair = factory.createPair(address(token0), address(token1));
(address _token0, address _token1) = UniswapV2Library.sortTokens(
address(token0),
address(token1)
);
assertEq(factory.allPairsLength(), 1);
assertEq(factory.getPair(address(token0), address(token1)), tokenPair);
assertEq(UniswapV2Pair(tokenPair).token0(), _token0);
assertEq(UniswapV2Pair(tokenPair).token1(), _token1);
}
function testCreatePairReverse() public {
address tokenPair = factory.createPair(address(token1), address(token0));
(address _token0, address _token1) = UniswapV2Library.sortTokens(
address(token0),
address(token1)
);
assertEq(factory.allPairsLength(), 1);
assertEq(factory.getPair(address(token0), address(token1)), tokenPair);
assertEq(UniswapV2Pair(tokenPair).token0(), _token0);
assertEq(UniswapV2Pair(tokenPair).token1(), _token1);
}
function testCreatePairMultipleTokens() public {
address tokenPair0 = factory.createPair(address(token0), address(token1));
address tokenPair1 = factory.createPair(address(token2), address(token3));
(address _token0, address _token1) = UniswapV2Library.sortTokens(address(token0), address(token1));
(address _token2, address _token3) = UniswapV2Library.sortTokens(address(token2), address(token3));
assertEq(factory.allPairsLength(), 2);
assertEq(factory.getPair(address(token0), address(token1)), tokenPair0);
assertEq(factory.getPair(address(token2), address(token3)), tokenPair1);
assertEq(UniswapV2Pair(tokenPair0).token0(), _token0);
assertEq(UniswapV2Pair(tokenPair0).token1(), _token1);
assertEq(UniswapV2Pair(tokenPair1).token0(), _token2);
assertEq(UniswapV2Pair(tokenPair1).token1(), _token3);
}
function testCreatePairChained() public {
address tokenPair0 = factory.createPair(address(token0), address(token1));
address tokenPair1 = factory.createPair(address(token1), address(token2));
address tokenPair2 = factory.createPair(address(token2), address(token3));
assertEq(factory.allPairsLength(), 3);
assertEq(factory.getPair(address(token0), address(token1)), tokenPair0);
assertEq(factory.getPair(address(token1), address(token2)), tokenPair1);
assertEq(factory.getPair(address(token2), address(token3)), tokenPair2);
}
function testCreatePairIdenticalTokens() public {
vm.expectRevert();
factory.createPair(address(token0), address(token0));
}
function testCreatePairInvalidToken() public {
vm.expectRevert();
factory.createPair(address(0), address(token1));
vm.expectRevert();
factory.createPair(address(token0), address(0));
}
function testCreatePairDuplicatePair() public {
factory.createPair(address(token0), address(token1));
vm.expectRevert();
factory.createPair(address(token0), address(token1));
}
}