ParserTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. use Dotenv\Parser;
  3. use PHPUnit\Framework\TestCase;
  4. class ParserTest extends TestCase
  5. {
  6. public function testBasicParse()
  7. {
  8. $this->assertSame(['FOO', 'BAR'], Parser::parse('FOO=BAR'));
  9. }
  10. public function testQuotesParse()
  11. {
  12. $this->assertSame(['FOO', "BAR \n"], Parser::parse("FOO=\"BAR \n\""));
  13. }
  14. public function testNewlineParse()
  15. {
  16. $this->assertSame(['FOO', "\n"], Parser::parse('FOO="\n"'));
  17. }
  18. public function testTabParse()
  19. {
  20. $this->assertSame(['FOO', "\t"], Parser::parse('FOO=\'\t\''));
  21. }
  22. public function testNonEscapeParse1()
  23. {
  24. $this->assertSame(['FOO', '\n\v'], Parser::parse('FOO=\n\v'));
  25. }
  26. public function testNonEscapeParse2()
  27. {
  28. $this->assertSame(['FOO', '\q'], Parser::parse('FOO=\q'));
  29. }
  30. /**
  31. * @expectedException \Dotenv\Exception\InvalidFileException
  32. * @expectedExceptionMessage Failed to parse dotenv file due to an unexpected escape sequence. Failed at ["\q"].
  33. */
  34. public function testBadEscapeParse()
  35. {
  36. Parser::parse('FOO="\q"');
  37. }
  38. public function testWhitespaceParse()
  39. {
  40. $this->assertSame(['FOO', "\n"], Parser::parse("FOO=\"\n\""));
  41. }
  42. public function testExportParse()
  43. {
  44. $this->assertSame(['FOO', 'bar baz'], Parser::parse('export FOO="bar baz"'));
  45. }
  46. public function testClosingSlashParse()
  47. {
  48. $content = 'SPVAR5="test some escaped characters like a quote \\" or maybe a backslash \\\\" # not escaped';
  49. $expected = ['SPVAR5', 'test some escaped characters like a quote " or maybe a backslash \\'];
  50. $this->assertSame($expected, Parser::parse($content));
  51. }
  52. /**
  53. * @expectedException \Dotenv\Exception\InvalidFileException
  54. * @expectedExceptionMessage Failed to parse dotenv file due to unexpected whitespace. Failed at [bar baz].
  55. */
  56. public function testParseInvalidSpaces()
  57. {
  58. Parser::parse('FOO=bar baz');
  59. }
  60. /**
  61. * @expectedException \Dotenv\Exception\InvalidFileException
  62. * @expectedExceptionMessage Failed to parse dotenv file due to an unexpected equals. Failed at [=].
  63. */
  64. public function testParseStrayEquals()
  65. {
  66. Parser::parse('=');
  67. }
  68. /**
  69. * @expectedException \Dotenv\Exception\InvalidFileException
  70. * @expectedExceptionMessage Failed to parse dotenv file due to an invalid name. Failed at [FOO_ASD!].
  71. */
  72. public function testParseInvalidName()
  73. {
  74. Parser::parse('FOO_ASD!=BAZ');
  75. }
  76. /**
  77. * @expectedException \Dotenv\Exception\InvalidFileException
  78. * @expectedExceptionMessage Failed to parse dotenv file due to an unexpected escape sequence. Failed at ["iiiiviiiixiiiiviiii\a"].
  79. */
  80. public function testParserEscapingDouble()
  81. {
  82. Parser::parse('FOO_BAD="iiiiviiiixiiiiviiii\\a"');
  83. }
  84. /**
  85. * @expectedException \Dotenv\Exception\InvalidFileException
  86. * @expectedExceptionMessage Failed to parse dotenv file due to an unexpected escape sequence. Failed at ['iiiiviiiixiiiiviiii\a'].
  87. */
  88. public function testParserEscapingSingle()
  89. {
  90. Parser::parse('FOO_BAD=\'iiiiviiiixiiiiviiii\\a\'');
  91. }
  92. }