Chris@13
|
1 <?php declare(strict_types=1);
|
Chris@0
|
2
|
Chris@0
|
3 namespace PhpParser\Node\Scalar;
|
Chris@0
|
4
|
Chris@13
|
5 use PHPUnit\Framework\TestCase;
|
Chris@13
|
6
|
Chris@13
|
7 class StringTest extends TestCase
|
Chris@0
|
8 {
|
Chris@0
|
9 /**
|
Chris@0
|
10 * @dataProvider provideTestParseEscapeSequences
|
Chris@0
|
11 */
|
Chris@0
|
12 public function testParseEscapeSequences($expected, $string, $quote) {
|
Chris@0
|
13 $this->assertSame(
|
Chris@0
|
14 $expected,
|
Chris@0
|
15 String_::parseEscapeSequences($string, $quote)
|
Chris@0
|
16 );
|
Chris@0
|
17 }
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * @dataProvider provideTestParse
|
Chris@0
|
21 */
|
Chris@0
|
22 public function testCreate($expected, $string) {
|
Chris@0
|
23 $this->assertSame(
|
Chris@0
|
24 $expected,
|
Chris@0
|
25 String_::parse($string)
|
Chris@0
|
26 );
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 public function provideTestParseEscapeSequences() {
|
Chris@13
|
30 return [
|
Chris@13
|
31 ['"', '\\"', '"'],
|
Chris@13
|
32 ['\\"', '\\"', '`'],
|
Chris@13
|
33 ['\\"\\`', '\\"\\`', null],
|
Chris@13
|
34 ["\\\$\n\r\t\f\v", '\\\\\$\n\r\t\f\v', null],
|
Chris@13
|
35 ["\x1B", '\e', null],
|
Chris@13
|
36 [chr(255), '\xFF', null],
|
Chris@13
|
37 [chr(255), '\377', null],
|
Chris@13
|
38 [chr(0), '\400', null],
|
Chris@13
|
39 ["\0", '\0', null],
|
Chris@13
|
40 ['\xFF', '\\\\xFF', null],
|
Chris@13
|
41 ];
|
Chris@0
|
42 }
|
Chris@0
|
43
|
Chris@0
|
44 public function provideTestParse() {
|
Chris@13
|
45 $tests = [
|
Chris@13
|
46 ['A', '\'A\''],
|
Chris@13
|
47 ['A', 'b\'A\''],
|
Chris@13
|
48 ['A', '"A"'],
|
Chris@13
|
49 ['A', 'b"A"'],
|
Chris@13
|
50 ['\\', '\'\\\\\''],
|
Chris@13
|
51 ['\'', '\'\\\'\''],
|
Chris@13
|
52 ];
|
Chris@0
|
53
|
Chris@0
|
54 foreach ($this->provideTestParseEscapeSequences() as $i => $test) {
|
Chris@0
|
55 // skip second and third tests, they aren't for double quotes
|
Chris@13
|
56 if ($i !== 1 && $i !== 2) {
|
Chris@13
|
57 $tests[] = [$test[0], '"' . $test[1] . '"'];
|
Chris@0
|
58 }
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 return $tests;
|
Chris@0
|
62 }
|
Chris@0
|
63 }
|