File "CashAddressTest.php"

Full Path: /home/digidjwy/public_html/wp-content/plugins/mycryptocheckout/vendor/btccom/bitwasp-bitcoin-bch-addon/test/Address/CashAddressTest.php
File size: 2.78 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace Btccom\BitcoinCash\Test\Address;

use Btccom\BitcoinCash\Address\CashAddress;
use Btccom\BitcoinCash\Exception\BitcoinCashNetworkRequiredException;
use Btccom\BitcoinCash\Exception\UnsupportedCashAddressException;
use Btccom\BitcoinCash\Network\BitcoinCashNetworkInterface;
use Btccom\BitcoinCash\Test\AbstractTestCase;
use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Network\NetworkFactory;
use BitWasp\Bitcoin\Script\ScriptType;
use BitWasp\Buffertools\Buffer;

class CashAddressTest extends AbstractTestCase
{
    /**
     * @dataProvider \Btccom\BitcoinCash\Test\Address\AddressCreatorTest::getCashAddressesAndNetwork()
     * @param BitcoinCashNetworkInterface $network
     * @param string $addressStr
     * @param string $addrScriptType
     * @param string $hashHex
     * @throws \CashAddr\Exception\Base32Exception
     * @throws \CashAddr\Exception\CashAddressException
     * @throws \Exception
     */
    public function testCashAddress(BitcoinCashNetworkInterface $network, $addressStr, $addrScriptType, $hashHex)
    {
        $address = new CashAddress($addrScriptType, Buffer::hex($hashHex));
        if (substr($addressStr, 0, strlen($network->getCashAddressPrefix())) === $network->getCashAddressPrefix()) {
            $this->assertEquals($addressStr, $address->getAddress($network));
        } else {
            $this->assertEquals($network->getCashAddressPrefix() . ":" . $addressStr, $address->getAddress($network));
        }

        $this->assertEquals($network->getCashAddressPrefix(), $address->getPrefix($network));
    }

    public function testConstructorRequiresValidScriptType()
    {
        $this->expectException(UnsupportedCashAddressException::class);
        new CashAddress(ScriptType::P2PK, new Buffer());
    }

    public function testGetAddressAbortsInvalidNetwork()
    {
        $address = new CashAddress(ScriptType::P2SH, Buffer::hex("", 20));

        $this->expectException(BitcoinCashNetworkRequiredException::class);
        $this->expectExceptionMessage("Invalid network - must implement BitcoinCashNetworkInterface");

        $address->getAddress(NetworkFactory::litecoin());
    }

    public function testGetAddressAbortsInvalidDefaultNetwork()
    {
        $prevDefault = Bitcoin::getNetwork();
        Bitcoin::setNetwork(NetworkFactory::litecoin());
        $address = new CashAddress(ScriptType::P2SH, Buffer::hex("", 20));

        $e = null;
        try {
            $address->getAddress();
        } catch (BitcoinCashNetworkRequiredException $_e) {
            $e = $_e;
            $this->assertEquals("Invalid network - must implement BitcoinCashNetworkInterface", $e->getMessage());
        } finally {
            Bitcoin::setNetwork($prevDefault);
        }

        $this->assertInstanceOf(BitcoinCashNetworkRequiredException::class, $e);
    }
}