21
21
22
22
class ConvertQueriesBackAndForthTest extends BaseCase
23
23
{
24
- /**
25
- * @var string[]
26
- */
27
- protected $ sql2Queries ;
28
-
29
24
/**
30
25
* @var QueryObjectModelInterface[]
31
26
*/
@@ -46,7 +41,6 @@ public function setUp(): void
46
41
parent ::setUp ();
47
42
48
43
$ factory = $ this ->session ->getWorkspace ()->getQueryManager ()->getQOMFactory ();
49
- $ this ->sql2Queries = Sql2TestQueries::getQueries ();
50
44
$ this ->qomQueries = QomTestQueries::getQueries ($ factory );
51
45
$ this ->qomParser = new QomToSql2QueryConverter (new Sql2Generator (new ValueConverter ()));
52
46
@@ -57,31 +51,42 @@ public function setUp(): void
57
51
}
58
52
}
59
53
60
- public function testBackAndForth ()
54
+ public function provideQueries ()
61
55
{
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 ;
77
82
}
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 " );
84
83
}
84
+ $ this ->fail ("QOM-->SQL2->QOM: Query variation $ name resulted in SQL2 that is not found: " .var_export ($ originalSql2Query , true ));
85
85
}
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 " );
86
91
}
87
92
}
0 commit comments