Skip to content

Commit 14d86bc

Browse files
authored
Merge pull request #195 from phpcr/use-data-provider
use a data provider to see what actually fails
2 parents 9db8e41 + 5d6d0d9 commit 14d86bc

File tree

2 files changed

+67
-43
lines changed

2 files changed

+67
-43
lines changed

tests/Query/QOM/ConvertQueriesBackAndForthTest.php

+33-28
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@
2121

2222
class ConvertQueriesBackAndForthTest extends BaseCase
2323
{
24-
/**
25-
* @var string[]
26-
*/
27-
protected $sql2Queries;
28-
2924
/**
3025
* @var QueryObjectModelInterface[]
3126
*/
@@ -46,7 +41,6 @@ public function setUp(): void
4641
parent::setUp();
4742

4843
$factory = $this->session->getWorkspace()->getQueryManager()->getQOMFactory();
49-
$this->sql2Queries = Sql2TestQueries::getQueries();
5044
$this->qomQueries = QomTestQueries::getQueries($factory);
5145
$this->qomParser = new QomToSql2QueryConverter(new Sql2Generator(new ValueConverter()));
5246

@@ -57,31 +51,42 @@ public function setUp(): void
5751
}
5852
}
5953

60-
public function testBackAndForth()
54+
public function provideQueries()
6155
{
62-
foreach ($this->qomQueries as $name => $originalQomQuery) {
63-
$originalSql2Query = $this->sql2Queries[$name];
64-
if (is_array($originalSql2Query)) {
65-
$this->assertGreaterThan(0, count($originalSql2Query), 'empty list of queries');
66-
$passed = false;
67-
$sql2 = 'None of the QOM statements matched';
68-
foreach ($originalSql2Query as $query) {
69-
$qom = $this->sql2Parser->parse($query);
70-
if ($originalQomQuery->getStatement() == $qom->getStatement()) {
71-
$sql2 = $this->qomParser->convert($qom);
72-
if ($sql2 == $query) {
73-
$passed = true;
74-
break;
75-
}
76-
}
56+
// unfortunately the provider can't create the QOM queries because phpunit calls the data providers before doing setUp/setupBeforeClass
57+
foreach (Sql2TestQueries::getQueries() as $name => $originalSqlQuery) {
58+
yield $name => [$name, $originalSqlQuery];
59+
}
60+
}
61+
62+
/**
63+
* @dataProvider provideQueries
64+
*
65+
* @param string $name
66+
* @param string|string[] $originalSql2Query
67+
*/
68+
public function testBackAndForth($name, $originalSql2Query)
69+
{
70+
if (!array_key_exists($name, $this->qomQueries)) {
71+
$this->markTestSkipped('Case '.$name.' needs to be implemented');
72+
}
73+
$originalQomQuery = $this->qomQueries[$name];
74+
if (is_array($originalSql2Query)) {
75+
$this->assertGreaterThan(0, count($originalSql2Query), 'empty list of queries');
76+
foreach ($originalSql2Query as $query) {
77+
$qom = $this->sql2Parser->parse($query);
78+
if ($originalQomQuery->getStatement() == $qom->getStatement()
79+
&& $query == $this->qomParser->convert($qom)
80+
) {
81+
return;
7782
}
78-
$this->assertTrue($passed, "QOM-->SQL2->QOM: Query variation $name resulted in SQL2 that is not found: $sql2");
79-
} else {
80-
$qom = $this->sql2Parser->parse($originalSql2Query);
81-
$this->assertEquals($originalQomQuery, $qom, "QOM-->SQL2: Original query = $originalSql2Query");
82-
$sql2 = $this->qomParser->convert($qom);
83-
$this->assertEquals($originalSql2Query, $sql2, "SQL2-->QOM: Original query = $originalSql2Query");
8483
}
84+
$this->fail("QOM-->SQL2->QOM: Query variation $name resulted in SQL2 that is not found: ".var_export($originalSql2Query, true));
8585
}
86+
87+
$qom = $this->sql2Parser->parse($originalSql2Query);
88+
$this->assertEquals($originalQomQuery, $qom, "QOM-->SQL2: Original query = $originalSql2Query");
89+
$sql2 = $this->qomParser->convert($qom);
90+
$this->assertEquals($originalSql2Query, $sql2, "SQL2-->QOM: Original query = $originalSql2Query");
8691
}
8792
}

tests/Query/QOM/Sql2ToQomConverterTest.php

+34-15
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,21 @@
2121

2222
class Sql2ToQomConverterTest extends \PHPCR\Test\BaseCase
2323
{
24-
protected $sql2Queries;
25-
24+
/**
25+
* @var QueryObjectModelInterface[]
26+
*/
2627
protected $qomQueries;
2728

28-
/** @var Sql2ToQomQueryConverter */
29+
/**
30+
* @var Sql2ToQomQueryConverter
31+
*/
2932
protected $parser;
3033

3134
public function setUp(): void
3235
{
3336
parent::setUp();
3437

3538
$factory = $this->session->getWorkspace()->getQueryManager()->getQOMFactory();
36-
$this->sql2Queries = Sql2TestQueries::getQueries();
3739
$this->qomQueries = QomTestQueries::getQueries($factory);
3840

3941
try {
@@ -66,20 +68,37 @@ public function testColumnsAndSelector()
6668
$this->assertEquals('prop2', $cols[1]->getColumnName());
6769
}
6870

69-
public function testQueries()
71+
public function provideQueries()
7072
{
71-
foreach ($this->qomQueries as $name => $query) {
72-
$sql2 = $this->sql2Queries[$name];
73-
if (is_array($sql2)) {
74-
foreach ($sql2 as $sql2Variation) {
75-
$qom = $this->parser->parse($sql2Variation);
76-
$this->assertEquals($query, $qom, "Original query = $sql2Variation");
77-
}
78-
} else {
79-
$qom = $this->parser->parse($sql2);
80-
$this->assertEquals($query, $qom, "Original query = $sql2");
73+
// unfortunately the provider can't create the QOM queries because phpunit calls the data providers before doing setUp/setupBeforeClass
74+
foreach (Sql2TestQueries::getQueries() as $name => $sql2) {
75+
yield $name => [$name, $sql2];
76+
}
77+
}
78+
79+
/**
80+
* @dataProvider provideQueries
81+
*
82+
* @param string $name
83+
* @param string|string[] $originalSql2Query
84+
*/
85+
public function testQueries($name, $sql2)
86+
{
87+
if (!array_key_exists($name, $this->qomQueries)) {
88+
$this->markTestSkipped('Case '.$name.' needs to be implemented');
89+
}
90+
$query = $this->qomQueries[$name];
91+
92+
if (is_array($sql2)) {
93+
foreach ($sql2 as $sql2Variation) {
94+
$qom = $this->parser->parse($sql2Variation);
95+
$this->assertEquals($query, $qom, "Original query = $sql2Variation");
8196
}
97+
return;
8298
}
99+
100+
$qom = $this->parser->parse($sql2);
101+
$this->assertEquals($query, $qom, "Original query = $sql2");
83102
}
84103

85104
public function getSQL2WithWhitespace()

0 commit comments

Comments
 (0)