--- /dev/null
+<?php
+
+namespace Tests\Behat\Gherkin\Node;
+
+use Behat\Gherkin\Node\TableNode;
+
+class TableNodeTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @expectedException \Behat\Gherkin\Exception\NodeException
+ */
+ public function testConstructorExpectsSameNumberOfColumnsInEachRow()
+ {
+ new TableNode(array(
+ array('username', 'password'),
+ array('everzet'),
+ array('antono', 'pa$sword')
+ ));
+ }
+
+ public function constructorTestDataProvider() {
+ return array(
+ 'One-dimensional array' => array(
+ array('everzet', 'antono')
+ ),
+ 'Three-dimensional array' => array(
+ array(array(array('everzet', 'antono')))
+ )
+ );
+ }
+
+ /**
+ * @dataProvider constructorTestDataProvider
+ * @expectedException \Behat\Gherkin\Exception\NodeException
+ * @expectedExceptionMessage Table is not two-dimensional.
+ */
+ public function testConstructorExpectsTwoDimensionalArrays($table)
+ {
+ new TableNode($table);
+ }
+
+ public function testHashTable()
+ {
+ $table = new TableNode(array(
+ array('username', 'password'),
+ array('everzet', 'qwerty'),
+ array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(
+ array(
+ array('username' => 'everzet', 'password' => 'qwerty')
+ , array('username' => 'antono', 'password' => 'pa$sword')
+ ),
+ $table->getHash()
+ );
+
+ $table = new TableNode(array(
+ array('username', 'password'),
+ array('', 'qwerty'),
+ array('antono', ''),
+ array('', '')
+ ));
+
+ $this->assertEquals(
+ array(
+ array('username' => '', 'password' => 'qwerty'),
+ array('username' => 'antono', 'password' => ''),
+ array('username' => '', 'password' => ''),
+ ),
+ $table->getHash()
+ );
+ }
+
+ public function testIterator()
+ {
+ $table = new TableNode(array(
+ array('username', 'password'),
+ array('', 'qwerty'),
+ array('antono', ''),
+ array('', ''),
+ ));
+
+ $this->assertEquals(
+ array(
+ array('username' => '', 'password' => 'qwerty'),
+ array('username' => 'antono', 'password' => ''),
+ array('username' => '', 'password' => ''),
+ ),
+ iterator_to_array($table)
+ );
+ }
+
+ public function testRowsHashTable()
+ {
+ $table = new TableNode(array(
+ array('username', 'everzet'),
+ array('password', 'qwerty'),
+ array('uid', '35'),
+ ));
+
+ $this->assertEquals(
+ array('username' => 'everzet', 'password' => 'qwerty', 'uid' => '35'),
+ $table->getRowsHash()
+ );
+ }
+
+ public function testLongRowsHashTable()
+ {
+ $table = new TableNode(array(
+ array('username', 'everzet', 'marcello'),
+ array('password', 'qwerty', '12345'),
+ array('uid', '35', '22')
+ ));
+
+ $this->assertEquals(array(
+ 'username' => array('everzet', 'marcello'),
+ 'password' => array('qwerty', '12345'),
+ 'uid' => array('35', '22')
+ ), $table->getRowsHash());
+ }
+
+ public function testGetRows()
+ {
+ $table = new TableNode(array(
+ array('username', 'password'),
+ array('everzet', 'qwerty'),
+ array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(array(
+ array('username', 'password'),
+ array('everzet', 'qwerty'),
+ array('antono', 'pa$sword')
+ ), $table->getRows());
+ }
+
+ public function testGetLines()
+ {
+ $table = new TableNode(array(
+ 5 => array('username', 'password'),
+ 10 => array('everzet', 'qwerty'),
+ 13 => array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(array(5, 10, 13), $table->getLines());
+ }
+
+ public function testGetRow()
+ {
+ $table = new TableNode(array(
+ array('username', 'password'),
+ array('everzet', 'qwerty'),
+ array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(array('username', 'password'), $table->getRow(0));
+ $this->assertEquals(array('antono', 'pa$sword'), $table->getRow(2));
+ }
+
+ public function testGetColumn()
+ {
+ $table = new TableNode(array(
+ array('username', 'password'),
+ array('everzet', 'qwerty'),
+ array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(array('username', 'everzet', 'antono'), $table->getColumn(0));
+ $this->assertEquals(array('password', 'qwerty', 'pa$sword'), $table->getColumn(1));
+
+ $table = new TableNode(array(
+ array('username'),
+ array('everzet'),
+ array('antono')
+ ));
+
+ $this->assertEquals(array('username', 'everzet', 'antono'), $table->getColumn(0));
+ }
+
+ public function testGetRowWithLineNumbers()
+ {
+ $table = new TableNode(array(
+ 5 => array('username', 'password'),
+ 10 => array('everzet', 'qwerty'),
+ 13 => array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(array('username', 'password'), $table->getRow(0));
+ $this->assertEquals(array('antono', 'pa$sword'), $table->getRow(2));
+ }
+
+ public function testGetTable()
+ {
+ $table = new TableNode($a = array(
+ 5 => array('username', 'password'),
+ 10 => array('everzet', 'qwerty'),
+ 13 => array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals($a, $table->getTable());
+ }
+
+ public function testGetRowLine()
+ {
+ $table = new TableNode(array(
+ 5 => array('username', 'password'),
+ 10 => array('everzet', 'qwerty'),
+ 13 => array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals(5, $table->getRowLine(0));
+ $this->assertEquals(13, $table->getRowLine(2));
+ }
+
+ public function testGetRowAsString()
+ {
+ $table = new TableNode(array(
+ 5 => array('username', 'password'),
+ 10 => array('everzet', 'qwerty'),
+ 13 => array('antono', 'pa$sword')
+ ));
+
+ $this->assertEquals('| username | password |', $table->getRowAsString(0));
+ $this->assertEquals('| antono | pa$sword |', $table->getRowAsString(2));
+ }
+
+ public function testGetTableAsString()
+ {
+ $table = new TableNode(array(
+ 5 => array('id', 'username', 'password'),
+ 10 => array('42', 'everzet', 'qwerty'),
+ 13 => array('2', 'antono', 'pa$sword')
+ ));
+
+ $expected = <<<TABLE
+| id | username | password |
+| 42 | everzet | qwerty |
+| 2 | antono | pa\$sword |
+TABLE;
+ $this->assertEquals($expected, $table->getTableAsString());
+ }
+
+ public function testFromList()
+ {
+ $table = TableNode::fromList(array(
+ 'everzet',
+ 'antono'
+ ));
+
+ $expected = new TableNode(array(
+ array('everzet'),
+ array('antono'),
+ ));
+ $this->assertEquals($expected, $table);
+ }
+
+ /**
+ * @expectedException \Behat\Gherkin\Exception\NodeException
+ */
+ public function testGetTableFromListWithMultidimensionalArrayArgument()
+ {
+ TableNode::fromList(array(
+ array(1, 2, 3),
+ array(4, 5, 6)
+ ));
+ }
+
+}