public function testLexesPunctuation()
{
$this->assertArraySubset(['kind' => Token::BANG, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('!'));
$this->assertArraySubset(['kind' => Token::DOLLAR, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('$'));
$this->assertArraySubset(['kind' => Token::PAREN_L, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('('));
$this->assertArraySubset(['kind' => Token::PAREN_R, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne(')'));
$this->assertArraySubset(['kind' => Token::SPREAD, 'start' => 0, 'end' => 3, 'value' => null], (array) $this->lexOne('...'));
$this->assertArraySubset(['kind' => Token::COLON, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne(':'));
$this->assertArraySubset(['kind' => Token::EQUALS, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('='));
$this->assertArraySubset(['kind' => Token::AT, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('@'));
$this->assertArraySubset(['kind' => Token::BRACKET_L, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('['));
$this->assertArraySubset(['kind' => Token::BRACKET_R, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne(']'));
$this->assertArraySubset(['kind' => Token::BRACE_L, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('{'));
$this->assertArraySubset(['kind' => Token::PIPE, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('|'));
$this->assertArraySubset(['kind' => Token::BRACE_R, 'start' => 0, 'end' => 1, 'value' => null], (array) $this->lexOne('}'));
}