Skip to content

Commit bb77258

Browse files
committed
Assert native parser delegate in extension test guards
1 parent 2b595f3 commit bb77258

3 files changed

Lines changed: 58 additions & 12 deletions

File tree

.github/workflows/mysql-parser-extension-tests.yml

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,15 @@ jobs:
7979
$rules = include "src/mysql/mysql-grammar.php";
8080
$grammar = new WP_Parser_Grammar( $rules );
8181
$parser = new WP_MySQL_Parser( $grammar, $tokens );
82-
if ( ! ( $parser instanceof WP_MySQL_Native_Parser ) ) {
83-
fwrite( STDERR, "Native parser is not available.\n" );
82+
$parser_reflection = new ReflectionObject( $parser );
83+
if ( ! $parser_reflection->hasProperty( "native" ) ) {
84+
fwrite( STDERR, "WP_MySQL_Parser did not select the native parser delegate.\n" );
85+
exit( 1 );
86+
}
87+
$native_property = $parser_reflection->getProperty( "native" );
88+
$native_property->setAccessible( true );
89+
if ( ! ( $native_property->getValue( $parser ) instanceof WP_MySQL_Native_Parser ) ) {
90+
fwrite( STDERR, "WP_MySQL_Parser did not select the native parser delegate.\n" );
8491
exit( 1 );
8592
}
8693
$ast = $parser->parse();
@@ -152,8 +159,15 @@ jobs:
152159
}
153160
$driver = new WP_PDO_MySQL_On_SQLite( "mysql-on-sqlite:path=:memory:;dbname=wp;" );
154161
$parser = $driver->create_parser( "SELECT 1" );
155-
if ( ! ( $parser instanceof WP_MySQL_Native_Parser ) ) {
156-
fwrite( STDERR, "SQLite driver did not create a native parser.\n" );
162+
$parser_reflection = new ReflectionObject( $parser );
163+
if ( ! $parser_reflection->hasProperty( "native" ) ) {
164+
fwrite( STDERR, "SQLite driver did not create a native parser delegate.\n" );
165+
exit( 1 );
166+
}
167+
$native_property = $parser_reflection->getProperty( "native" );
168+
$native_property->setAccessible( true );
169+
if ( ! ( $native_property->getValue( $parser ) instanceof WP_MySQL_Native_Parser ) ) {
170+
fwrite( STDERR, "SQLite driver did not create a native parser delegate.\n" );
157171
exit( 1 );
158172
}
159173
$parser->next_query();

.github/workflows/wp-tests-phpunit-native-extension-setup.sh

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,15 @@ $tokens = $lexer->native_token_stream();
125125
$rules = include '/var/www/src/wp-content/plugins/sqlite-database-integration/wp-includes/database/mysql/mysql-grammar.php';
126126
$grammar = new WP_Parser_Grammar( $rules );
127127
$parser = new WP_MySQL_Parser( $grammar, $tokens );
128-
if ( ! ( $parser instanceof WP_MySQL_Native_Parser ) ) {
129-
fwrite( STDERR, "WordPress PHP test container did not select the native parser.\n" );
128+
$parser_reflection = new ReflectionObject( $parser );
129+
if ( ! $parser_reflection->hasProperty( 'native' ) ) {
130+
fwrite( STDERR, "WordPress PHP test container did not select the native parser delegate.\n" );
131+
exit( 1 );
132+
}
133+
$native_property = $parser_reflection->getProperty( 'native' );
134+
$native_property->setAccessible( true );
135+
if ( ! ( $native_property->getValue( $parser ) instanceof WP_MySQL_Native_Parser ) ) {
136+
fwrite( STDERR, "WordPress PHP test container did not select the native parser delegate.\n" );
130137
exit( 1 );
131138
}
132139
@@ -138,8 +145,15 @@ if ( ! ( $parser_ast instanceof WP_MySQL_Native_Parser_Node ) ) {
138145
139146
$driver = new WP_PDO_MySQL_On_SQLite( 'mysql-on-sqlite:path=:memory:;dbname=wp;' );
140147
$parser = $driver->create_parser( 'SELECT 1' );
141-
if ( ! ( $parser instanceof WP_MySQL_Native_Parser ) ) {
142-
fwrite( STDERR, "WordPress PHP test container SQLite driver did not create a native parser.\n" );
148+
$parser_reflection = new ReflectionObject( $parser );
149+
if ( ! $parser_reflection->hasProperty( 'native' ) ) {
150+
fwrite( STDERR, "WordPress PHP test container SQLite driver did not create a native parser delegate.\n" );
151+
exit( 1 );
152+
}
153+
$native_property = $parser_reflection->getProperty( 'native' );
154+
$native_property->setAccessible( true );
155+
if ( ! ( $native_property->getValue( $parser ) instanceof WP_MySQL_Native_Parser ) ) {
156+
fwrite( STDERR, "WordPress PHP test container SQLite driver did not create a native parser delegate.\n" );
143157
exit( 1 );
144158
}
145159
$parser->next_query();

packages/mysql-on-sqlite/tests/bootstrap.php

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,15 @@
2525
$native_parser_rules = include __DIR__ . '/../src/mysql/mysql-grammar.php';
2626
$native_parser_grammar = new WP_Parser_Grammar( $native_parser_rules );
2727
$native_parser = new WP_MySQL_Parser( $native_parser_grammar, $native_parser_tokens );
28-
if ( ! ( $native_parser instanceof WP_MySQL_Native_Parser ) ) {
29-
fwrite( STDERR, "WP_MySQL_Parser did not resolve to the native implementation.\n" );
28+
$native_parser_reflection = new ReflectionObject( $native_parser );
29+
if ( ! $native_parser_reflection->hasProperty( 'native' ) ) {
30+
fwrite( STDERR, "WP_MySQL_Parser did not create a native parser delegate.\n" );
31+
exit( 1 );
32+
}
33+
$native_parser_property = $native_parser_reflection->getProperty( 'native' );
34+
$native_parser_property->setAccessible( true );
35+
if ( ! ( $native_parser_property->getValue( $native_parser ) instanceof WP_MySQL_Native_Parser ) ) {
36+
fwrite( STDERR, "WP_MySQL_Parser did not create a native parser delegate.\n" );
3037
exit( 1 );
3138
}
3239

@@ -38,8 +45,15 @@
3845

3946
$native_parser_driver = new WP_PDO_MySQL_On_SQLite( 'mysql-on-sqlite:path=:memory:;dbname=wp;' );
4047
$native_parser_driver_parser = $native_parser_driver->create_parser( 'SELECT 1' );
41-
if ( ! ( $native_parser_driver_parser instanceof WP_MySQL_Native_Parser ) ) {
42-
fwrite( STDERR, "WP_PDO_MySQL_On_SQLite did not create a native parser.\n" );
48+
$native_parser_driver_reflection = new ReflectionObject( $native_parser_driver_parser );
49+
if ( ! $native_parser_driver_reflection->hasProperty( 'native' ) ) {
50+
fwrite( STDERR, "WP_PDO_MySQL_On_SQLite did not create a native parser delegate.\n" );
51+
exit( 1 );
52+
}
53+
$native_parser_driver_property = $native_parser_driver_reflection->getProperty( 'native' );
54+
$native_parser_driver_property->setAccessible( true );
55+
if ( ! ( $native_parser_driver_property->getValue( $native_parser_driver_parser ) instanceof WP_MySQL_Native_Parser ) ) {
56+
fwrite( STDERR, "WP_PDO_MySQL_On_SQLite did not create a native parser delegate.\n" );
4357
exit( 1 );
4458
}
4559

@@ -65,6 +79,10 @@
6579
$native_parser_lexer,
6680
$native_parser_driver,
6781
$native_parser_driver_parser,
82+
$native_parser_reflection,
83+
$native_parser_property,
84+
$native_parser_driver_reflection,
85+
$native_parser_driver_property,
6886
$native_parser_driver_ast,
6987
$native_parser_driver_child
7088
);

0 commit comments

Comments
 (0)