Skip to content

Commit

Permalink
Tests for multiple character delimiters support
Browse files Browse the repository at this point in the history
  • Loading branch information
rozwell committed May 5, 2013
1 parent cfa8222 commit 9687fe5
Showing 1 changed file with 97 additions and 8 deletions.
105 changes: 97 additions & 8 deletions test/testsuite/generator/util/PropelSQLParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,18 +99,22 @@ public function testDelimiterOneCharacter()
$this->assertEquals(array(), $parser->explodeIntoStatements());
}

/**
* @expectedException PropelException
*/
public function testDelimiterMultipleCharacters()
{
// multiple characters are not supported for now
$parser = new PropelSQLParser();
$parser->setSQL('DELIMITER ||');
$parser->explodeIntoStatements();
$this->assertEquals(array(), $parser->explodeIntoStatements());

$parser = new PropelSQLParser();
$parser->setSQL('DELIMITER |||');
$this->assertEquals(array(), $parser->explodeIntoStatements());

$parser = new PropelSQLParser();
$parser->setSQL('DELIMITER ////');
$this->assertEquals(array(), $parser->explodeIntoStatements());
}

public function delimiterExplodeIntoStatementsDataProvider()
public function singleDelimiterExplodeIntoStatementsDataProvider()
{
return array(
array("delimiter |", array()),
Expand All @@ -127,10 +131,95 @@ public function delimiterExplodeIntoStatementsDataProvider()
array("DELIMITER |\n".'foo"\"|"bar;'."\nDELIMITER ;\nbaz", array('foo"\"|"bar;', 'baz')),
);
}

/**
* @dataProvider singleDelimiterExplodeIntoStatementsDataProvider
*/
public function testSingleDelimiterExplodeIntoStatements($input, $output)
{
$parser = new PropelSQLParser();
$parser->setSQL($input);
$this->assertEquals($output, $parser->explodeIntoStatements());
}

public function twoCharDelimiterExplodeIntoStatementsDataProvider()
{
return array(
array("delimiter ||", array()),
array("DELIMITER ||", array()),
array("foo;\nDELIMITER ||", array('foo')),
array("foo;\nDELIMITER ||\nbar", array('foo', 'bar')),
array("foo;\nDELIMITER ||\nbar;", array('foo', 'bar;')),
array("foo;\nDELIMITER ||\nbar;\nbaz;", array('foo', "bar;\nbaz;")),
array("foo;\nDELIMITER ||\nbar;\nbaz;\nDELIMITER ;", array('foo', "bar;\nbaz;")),
array("foo;\nDELIMITER ||\nbar;\nbaz;\nDELIMITER ;\nqux", array('foo', "bar;\nbaz;", 'qux')),
array("foo;\nDELIMITER ||\nbar;\nbaz;\nDELIMITER ;\nqux;", array('foo', "bar;\nbaz;", 'qux')),
array("DELIMITER ||\n".'foo"||"bar;'."\nDELIMITER ;\nbaz", array('foo"||"bar;', 'baz')),
array("DELIMITER ||\n".'foo\'||\'bar;'."\nDELIMITER ;\nbaz", array('foo\'||\'bar;', 'baz')),
array("DELIMITER ||\n".'foo"\"||"bar;'."\nDELIMITER ;\nbaz", array('foo"\"||"bar;', 'baz')),
);
}

/**
* @dataProvider twoCharDelimiterExplodeIntoStatementsDataProvider
*/
public function testTwoCharDelimiterExplodeIntoStatements($input, $output)
{
$parser = new PropelSQLParser();
$parser->setSQL($input);
$this->assertEquals($output, $parser->explodeIntoStatements());
}

public function threeCharDelimiterExplodeIntoStatementsDataProvider()
{
return array(
array("delimiter |||", array()),
array("DELIMITER |||", array()),
array("foo;\nDELIMITER |||", array('foo')),
array("foo;\nDELIMITER |||\nbar", array('foo', 'bar')),
array("foo;\nDELIMITER |||\nbar;", array('foo', 'bar;')),
array("foo;\nDELIMITER |||\nbar;\nbaz;", array('foo', "bar;\nbaz;")),
array("foo;\nDELIMITER |||\nbar;\nbaz;\nDELIMITER ;", array('foo', "bar;\nbaz;")),
array("foo;\nDELIMITER |||\nbar;\nbaz;\nDELIMITER ;\nqux", array('foo', "bar;\nbaz;", 'qux')),
array("foo;\nDELIMITER |||\nbar;\nbaz;\nDELIMITER ;\nqux;", array('foo', "bar;\nbaz;", 'qux')),
array("DELIMITER |||\n".'foo"|||"bar;'."\nDELIMITER ;\nbaz", array('foo"|||"bar;', 'baz')),
array("DELIMITER |||\n".'foo\'|||\'bar;'."\nDELIMITER ;\nbaz", array('foo\'|||\'bar;', 'baz')),
array("DELIMITER |||\n".'foo"\"|||"bar;'."\nDELIMITER ;\nbaz", array('foo"\"|||"bar;', 'baz')),
);
}

/**
* @dataProvider threeCharDelimiterExplodeIntoStatementsDataProvider
*/
public function testThreeCharDelimiterExplodeIntoStatements($input, $output)
{
$parser = new PropelSQLParser();
$parser->setSQL($input);
$this->assertEquals($output, $parser->explodeIntoStatements());
}

public function fourCharDelimiterExplodeIntoStatementsDataProvider()
{
return array(
array("delimiter ////", array()),
array("DELIMITER ////", array()),
array("foo;\nDELIMITER ////", array('foo')),
array("foo;\nDELIMITER ////\nbar", array('foo', 'bar')),
array("foo;\nDELIMITER ////\nbar;", array('foo', 'bar;')),
array("foo;\nDELIMITER ////\nbar;\nbaz;", array('foo', "bar;\nbaz;")),
array("foo;\nDELIMITER ////\nbar;\nbaz;\nDELIMITER ;", array('foo', "bar;\nbaz;")),
array("foo;\nDELIMITER ////\nbar;\nbaz;\nDELIMITER ;\nqux", array('foo', "bar;\nbaz;", 'qux')),
array("foo;\nDELIMITER ////\nbar;\nbaz;\nDELIMITER ;\nqux;", array('foo', "bar;\nbaz;", 'qux')),
array("DELIMITER ////\n".'foo"////"bar;'."\nDELIMITER ;\nbaz", array('foo"////"bar;', 'baz')),
array("DELIMITER ////\n".'foo\'////\'bar;'."\nDELIMITER ;\nbaz", array('foo\'////\'bar;', 'baz')),
array("DELIMITER ////\n".'foo"\"////"bar;'."\nDELIMITER ;\nbaz", array('foo"\"////"bar;', 'baz')),
);
}

/**
* @dataProvider delimiterExplodeIntoStatementsDataProvider
* @dataProvider fourCharDelimiterExplodeIntoStatementsDataProvider
*/
public function testDelimiterExplodeIntoStatements($input, $output)
public function testFourCharDelimiterExplodeIntoStatements($input, $output)
{
$parser = new PropelSQLParser();
$parser->setSQL($input);
Expand Down

0 comments on commit 9687fe5

Please sign in to comment.