Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 16
KVSourceRange
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 4
20
0.00% covered (danger)
0.00%
0 / 16
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 offset
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 5
 fromArray
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 jsonSerialize
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
<?php
declare( strict_types = 1 );
namespace Wikimedia\Parsoid\Tokens;
use Wikimedia\Assert\Assert;
/**
 * Represents a source offset range for a key-value pair.
 */
class KVSourceRange implements \JsonSerializable {
    /**
     * Source range for the key.
     * @var SourceRange
     */
    public $key;
    /**
     * Source range for the value.
     * @var SourceRange
     */
    public $value;
    /**
     * Create a new key-value source offset range.
     * @param int $keyStart The start index of the key
     *   (unicode code points, inclusive)
     * @param int $keyEnd The end index of the key
     *   (unicode code points, exclusive)
     * @param int $valueStart The start index of the value
     *   (unicode code points, inclusive)
     * @param int $valueEnd The end index of the value
     *   (unicode code points, exclusive)
     */
    public function __construct( int $keyStart, int $keyEnd, int $valueStart, int $valueEnd ) {
        $this->key = new SourceRange( $keyStart, $keyEnd );
        $this->value = new SourceRange( $valueStart, $valueEnd );
    }
    /**
     * Return a new key-value source offset range shifted by $amount.
     * @param int $amount The amount to shift by
     * @return KVSourceRange
     */
    public function offset( int $amount ): KVSourceRange {
        return new KVSourceRange(
            $this->key->start + $amount,
            $this->key->end + $amount,
            $this->value->start + $amount,
            $this->value->end + $amount
        );
    }
    /**
     * Create a new key-value source offset range from an array of
     * integers (such as created during JSON serialization).
     * @param int[] $so
     * @return KVSourceRange
     */
    public static function fromArray( array $so ): KVSourceRange {
        Assert::invariant(
            count( $so ) === 4,
            'Not enough elements in KVSourceRange array'
        );
        return new KVSourceRange( $so[0], $so[1], $so[2], $so[3] );
    }
    /**
     * @inheritDoc
     */
    public function jsonSerialize(): array {
        return [
            $this->key->start,
            $this->key->end,
            $this->value->start,
            $this->value->end,
        ];
    }
}