2121
2222class 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}
0 commit comments