LexerTest.php
2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
namespace JmesPath\Tests;
use JmesPath\Lexer;
use JmesPath\SyntaxErrorException;
/**
* @covers JmesPath\Lexer
*/
class LexerTest extends \PHPUnit_Framework_TestCase
{
public function inputProvider()
{
return array(
array('0', 'number'),
array('1', 'number'),
array('2', 'number'),
array('3', 'number'),
array('4', 'number'),
array('5', 'number'),
array('6', 'number'),
array('7', 'number'),
array('8', 'number'),
array('9', 'number'),
array('-1', 'number'),
array('-1.5', 'number'),
array('109.5', 'number'),
array('.', 'dot'),
array('{', 'lbrace'),
array('}', 'rbrace'),
array('[', 'lbracket'),
array(']', 'rbracket'),
array(':', 'colon'),
array(',', 'comma'),
array('||', 'or'),
array('*', 'star'),
array('foo', 'identifier'),
array('"foo"', 'quoted_identifier'),
array('`true`', 'literal'),
array('`false`', 'literal'),
array('`null`', 'literal'),
array('`"true"`', 'literal')
);
}
/**
* @dataProvider inputProvider
*/
public function testTokenizesInput($input, $type)
{
$l = new Lexer();
$tokens = $l->tokenize($input);
$this->assertEquals($tokens[0]['type'], $type);
}
public function testTokenizesJsonLiterals()
{
$l = new Lexer();
$tokens = $l->tokenize('`null`, `false`, `true`, `"abc"`, `"ab\\"c"`,'
. '`0`, `0.45`, `-0.5`');
$this->assertNull($tokens[0]['value']);
$this->assertFalse($tokens[2]['value']);
$this->assertTrue($tokens[4]['value']);
$this->assertEquals('abc', $tokens[6]['value']);
$this->assertEquals('ab"c', $tokens[8]['value']);
$this->assertSame(0, $tokens[10]['value']);
$this->assertSame(0.45, $tokens[12]['value']);
$this->assertSame(-0.5, $tokens[14]['value']);
}
public function testTokenizesJsonNumbers()
{
$l = new Lexer();
$tokens = $l->tokenize('`10`, `1.2`, `-10.20e-10`, `1.2E+2`');
$this->assertEquals(10, $tokens[0]['value']);
$this->assertEquals(1.2, $tokens[2]['value']);
$this->assertEquals(-1.02E-9, $tokens[4]['value']);
$this->assertEquals(120, $tokens[6]['value']);
}
public function testCanWorkWithElidedJsonLiterals()
{
$l = new Lexer();
$tokens = $l->tokenize('`foo`');
$this->assertEquals('foo', $tokens[0]['value']);
$this->assertEquals('literal', $tokens[0]['type']);
}
}