StepTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. use Codeception\Util\Stub;
  3. use Facebook\WebDriver\WebDriverBy;
  4. use Codeception\Util\Locator;
  5. class StepTest extends \PHPUnit\Framework\TestCase
  6. {
  7. /**
  8. * @param $args
  9. * @return Codeception\Step
  10. */
  11. protected function getStep($args)
  12. {
  13. return $this->getMockBuilder('\Codeception\Step')->setConstructorArgs($args)->setMethods(null)->getMock();
  14. }
  15. public function testGetArguments()
  16. {
  17. $by = WebDriverBy::cssSelector('.something');
  18. $step = $this->getStep([null, [$by]]);
  19. $this->assertEquals('"' . Locator::humanReadableString($by) . '"', $step->getArgumentsAsString());
  20. $step = $this->getStep([null, [['just', 'array']]]);
  21. $this->assertEquals('["just","array"]', $step->getArgumentsAsString());
  22. $step = $this->getStep([null, [function () {
  23. }]]);
  24. $this->assertEquals('"Closure"', $step->getArgumentsAsString());
  25. $step = $this->getStep([null, [[$this, 'testGetArguments']]]);
  26. $this->assertEquals('["StepTest","testGetArguments"]', $step->getArgumentsAsString());
  27. $step = $this->getStep([null, [['PDO', 'getAvailableDrivers']]]);
  28. $this->assertEquals('["PDO","getAvailableDrivers"]', $step->getArgumentsAsString());
  29. $step = $this->getStep([null, [[Stub::make($this, []), 'testGetArguments']]]);
  30. $this->assertEquals('["StepTest","testGetArguments"]', $step->getArgumentsAsString());
  31. $mock = $this->createMock(get_class($this));
  32. $step = $this->getStep([null, [[$mock, 'testGetArguments']]]);
  33. $className = get_class($mock);
  34. $this->assertEquals('["' . $className . '","testGetArguments"]', $step->getArgumentsAsString());
  35. }
  36. public function testGetHtml()
  37. {
  38. $step = $this->getStep(['Do some testing', ['arg1', 'arg2']]);
  39. $this->assertSame('I do some testing <span style="color: #732E81">&quot;arg1&quot;,&quot;arg2&quot;</span>', $step->getHtml());
  40. $step = $this->getStep(['Do some testing', []]);
  41. $this->assertSame('I do some testing', $step->getHtml());
  42. }
  43. public function testLongArguments()
  44. {
  45. $step = $this->getStep(['have in database', [str_repeat('a', 2000)]]);
  46. $output = $step->toString(200);
  47. $this->assertLessThan(201, strlen($output), 'Output is too long: ' . $output);
  48. $step = $this->getStep(['have in database', [str_repeat('a', 100), str_repeat('b', 100)]]);
  49. $output = $step->toString(50);
  50. $this->assertEquals(50, strlen($output), 'Incorrect length of output: ' . $output);
  51. $this->assertEquals('have in database "aaaaaaaaaaa...","bbbbbbbbbbb..."', $output);
  52. $step = $this->getStep(['have in database', [1, str_repeat('b', 100)]]);
  53. $output = $step->toString(50);
  54. $this->assertEquals('have in database 1,"bbbbbbbbbbbbbbbbbbbbbbbbbb..."', $output);
  55. $step = $this->getStep(['have in database', [str_repeat('b', 100), 1]]);
  56. $output = $step->toString(50);
  57. $this->assertEquals('have in database "bbbbbbbbbbbbbbbbbbbbbbbbbb...",1', $output);
  58. }
  59. public function testArrayAsArgument()
  60. {
  61. $step = $this->getStep(['see array', [[1,2,3], 'two']]);
  62. $output = $step->toString(200);
  63. $this->assertEquals('see array [1,2,3],"two"', $output);
  64. }
  65. public function testSingleQuotedStringAsArgument()
  66. {
  67. $step = $this->getStep(['see array', [[1,2,3], "'two'"]]);
  68. $output = $step->toString(200);
  69. $this->assertEquals('see array [1,2,3],"\'two\'"', $output);
  70. }
  71. public function testSeeUppercaseText()
  72. {
  73. $step = $this->getStep(['see', ['UPPER CASE']]);
  74. $output = $step->toString(200);
  75. $this->assertEquals('see "UPPER CASE"', $output);
  76. }
  77. public function testMultiByteTextLengthIsMeasuredCorrectly()
  78. {
  79. $step = $this->getStep(['see', ['ŽŽŽŽŽŽŽŽŽŽ', 'AAAAAAAAAAA']]);
  80. $output = $step->toString(30);
  81. $this->assertEquals('see "ŽŽŽŽŽŽŽŽŽŽ","AAAAAAAAAAA"', $output);
  82. }
  83. public function testAmOnUrl()
  84. {
  85. $step = $this->getStep(['amOnUrl', ['http://www.example.org/test']]);
  86. $output = $step->toString(200);
  87. $this->assertEquals('am on url "http://www.example.org/test"', $output);
  88. }
  89. public function testNoArgs()
  90. {
  91. $step = $this->getStep(['acceptPopup', []]);
  92. $output = $step->toString(200);
  93. $this->assertEquals('accept popup ', $output);
  94. $output = $step->toString(-5);
  95. $this->assertEquals('accept popup ', $output);
  96. }
  97. public function testSeeMultiLineStringInSingleLine()
  98. {
  99. $step = $this->getStep(['see', ["aaaa\nbbbb\nc"]]);
  100. $output = $step->toString(200);
  101. $this->assertEquals('see "aaaa\nbbbb\nc"', $output);
  102. }
  103. public function testFormattedOutput()
  104. {
  105. $argument = Codeception\Util\Stub::makeEmpty('\Codeception\Step\Argument\FormattedOutput');
  106. $argument->method('getOutput')->willReturn('some formatted output');
  107. $step = $this->getStep(['argument', [$argument]]);
  108. $output = $step->toString(200);
  109. $this->assertEquals('argument "some formatted output"', $output);
  110. }
  111. }