Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
drupal
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Custom Issue Tracker
Custom Issue Tracker
Labels
Merge Requests
313
Merge Requests
313
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
project
drupal
Commits
6c410da2
Commit
6c410da2
authored
May 07, 2014
by
alexpott
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue
#2124365
by Mile23: Expand phpunit tests for \Drupal\Core\Database\Connection.
parent
eef067b5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
457 additions
and
0 deletions
+457
-0
core/tests/Drupal/Tests/Core/Database/ConnectionTest.php
core/tests/Drupal/Tests/Core/Database/ConnectionTest.php
+326
-0
core/tests/Drupal/Tests/Core/Database/Stub/Driver/Schema.php
core/tests/Drupal/Tests/Core/Database/Stub/Driver/Schema.php
+18
-0
core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
.../tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
+77
-0
core/tests/Drupal/Tests/Core/Database/Stub/StubPDO.php
core/tests/Drupal/Tests/Core/Database/Stub/StubPDO.php
+36
-0
No files found.
core/tests/Drupal/Tests/Core/Database/ConnectionTest.php
0 → 100644
View file @
6c410da2
<?php
/**
* @file
* Contains Drupal\Tests\Core\Database\ConnectionTest.
*/
namespace
Drupal\Tests\Core\Database
;
use
Drupal\Tests\Core\Database\Stub\StubConnection
;
use
Drupal\Tests\Core\Database\Stub\StubPDO
;
use
Drupal\Tests\UnitTestCase
;
/**
* Tests Drupal\Core\Database\Connection.
*
* @group Drupal
* @group Database
*/
class
ConnectionTest
extends
UnitTestCase
{
/**
* {@inheritdoc}
*/
public
static
function
getInfo
()
{
return
array
(
'name'
=>
'Connection Test'
,
'description'
=>
'Test the Connection class.'
,
'group'
=>
'Database'
,
);
}
/**
* Dataprovider for testPrefixRoundTrip().
*
* @return array
* Array of arrays with the following elements:
* - Arguments to pass to Connection::setPrefix().
* - Expected result from Connection::tablePrefix().
*/
public
function
providerPrefixRoundTrip
()
{
return
array
(
array
(
array
(
''
=>
'test_'
),
'test_'
,
),
array
(
array
(
'fooTable'
=>
'foo_'
,
'barTable'
=>
'bar_'
,
),
array
(
'fooTable'
=>
'foo_'
,
'barTable'
=>
'bar_'
,
),
),
);
}
/**
* Exercise setPrefix() and tablePrefix().
*
* @dataProvider providerPrefixRoundTrip
*/
public
function
testPrefixRoundTrip
(
$expected
,
$prefix_info
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
());
// setPrefix() is protected, so we make it accessible with reflection.
$reflection
=
new
\
ReflectionClass
(
'Drupal\Tests\Core\Database\Stub\StubConnection'
);
$set_prefix
=
$reflection
->
getMethod
(
'setPrefix'
);
$set_prefix
->
setAccessible
(
TRUE
);
// Set the prefix data.
$set_prefix
->
invokeArgs
(
$connection
,
array
(
$prefix_info
));
// Check the round-trip.
foreach
(
$expected
as
$table
=>
$prefix
)
{
$this
->
assertEquals
(
$prefix
,
$connection
->
tablePrefix
(
$table
));
}
}
/**
* Dataprovider for testPrefixTables().
*
* @return array
* Array of arrays with the following elements:
* - Expected result.
* - Table prefix.
* - Query to be prefixed.
*/
public
function
providerTestPrefixTables
()
{
return
array
(
array
(
'SELECT * FROM test_table'
,
'test_'
,
'SELECT * FROM {table}'
,
),
array
(
'SELECT * FROM first_table JOIN second_thingie'
,
array
(
'table'
=>
'first_'
,
'thingie'
=>
'second_'
,
),
'SELECT * FROM {table} JOIN {thingie}'
,
),
);
}
/**
* Exercise the prefixTables() method.
*
* @dataProvider providerTestPrefixTables
*/
public
function
testPrefixTables
(
$expected
,
$prefix_info
,
$query
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
(
'prefix'
=>
$prefix_info
));
$this
->
assertEquals
(
$expected
,
$connection
->
prefixTables
(
$query
));
}
/**
* Dataprovider for testEscapeMethods().
*
* @return array
* Array of arrays with the following elements:
* - Expected escaped string.
* - String to escape.
*/
public
function
providerEscapeMethods
()
{
return
array
(
array
(
'thing'
,
'thing'
),
array
(
'_item'
,
'_item'
),
array
(
'item_'
,
'item_'
),
array
(
'_item_'
,
'_item_'
),
array
(
''
,
'!@#$%^&*()-=+'
),
array
(
'123'
,
'!1@2#3'
),
);
}
/**
* Test the various escaping methods.
*
* All tested together since they're basically the same method
* with different names.
*
* @dataProvider providerEscapeMethods
* @todo Separate test method for each escape method?
*/
public
function
testEscapeMethods
(
$expected
,
$name
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
());
$this
->
assertEquals
(
$expected
,
$connection
->
escapeDatabase
(
$name
));
$this
->
assertEquals
(
$expected
,
$connection
->
escapeTable
(
$name
));
$this
->
assertEquals
(
$expected
,
$connection
->
escapeField
(
$name
));
$this
->
assertEquals
(
$expected
,
$connection
->
escapeAlias
(
$name
));
}
/**
* Dataprovider for testGetDriverClass().
*
* @return array
* Array of arrays with the following elements:
* - Expected namespaced class name.
* - Driver.
* - Namespace.
* - Class name without namespace.
*/
public
function
providerGetDriverClass
()
{
return
array
(
array
(
'nonexistent_class'
,
'stub'
,
'\\'
,
'nonexistent_class'
,
),
array
(
'Drupal\\Core\\Database\\Driver\\mysql\\Select'
,
'mysql'
,
NULL
,
'Select'
,
),
array
(
'Drupal\\Tests\\Core\\Database\\Stub\\Driver\\Schema'
,
'stub'
,
'Drupal\\Tests\\Core\\Database\\Stub\\Driver'
,
'Schema'
,
),
);
}
/**
* Test getDriverClass().
*
* @dataProvider providerGetDriverClass
*/
public
function
testGetDriverClass
(
$expected
,
$driver
,
$namespace
,
$class
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
(
'namespace'
=>
$namespace
));
// Set the driver using our stub class' public property.
$connection
->
driver
=
$driver
;
$this
->
assertEquals
(
$expected
,
$connection
->
getDriverClass
(
$class
));
}
/**
* Dataprovider for testSchema().
*
* @return array
* Array of arrays with the following elements:
* - Expected namespaced class of schema object.
* - Driver for PDO connection.
* - Namespace for connection.
*/
public
function
providerSchema
()
{
return
array
(
array
(
'Drupal\\Tests\\Core\\Database\\Stub\\Driver\\Schema'
,
'stub'
,
'Drupal\\Tests\\Core\\Database\\Stub\\Driver'
,
),
);
}
/**
* Test Connection::schema().
*
* @dataProvider providerSchema
*/
public
function
testSchema
(
$expected
,
$driver
,
$namespace
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
(
'namespace'
=>
$namespace
));
$connection
->
driver
=
$driver
;
$this
->
assertInstanceOf
(
$expected
,
$connection
->
schema
());
}
/**
* Test Connection::destroy().
*/
public
function
testDestroy
()
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
// Mocking StubConnection gives us access to the $schema attribute.
$connection
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubConnection'
,
NULL
,
array
(
$mock_pdo
,
array
(
'namespace'
=>
'Drupal\\Tests\\Core\\Database\\Stub\\Driver'
))
);
// Generate a schema object in order to verify that we've NULLed it later.
$this
->
assertInstanceOf
(
'Drupal\\Tests\\Core\\Database\\Stub\\Driver\\Schema'
,
$connection
->
schema
()
);
$connection
->
destroy
();
$this
->
assertAttributeEquals
(
NULL
,
'schema'
,
$connection
);
}
/**
* Dataprovider for testMakeComments().
*
* @return array
* Array of arrays with the following elements:
* - Expected filtered comment.
* - Arguments for Connection::makeComment().
*/
public
function
providerMakeComments
()
{
return
array
(
array
(
'/* */ '
,
array
(
''
),
),
array
(
'/* Exploit * / DROP TABLE node; -- */ '
,
array
(
'Exploit * / DROP TABLE node; --'
),
),
array
(
'/* Exploit DROP TABLE node; --; another comment */ '
,
array
(
'Exploit */ DROP TABLE node; --'
,
'another comment'
),
),
);
}
/**
* Test Connection::makeComments().
*
* @dataProvider providerMakeComments
*/
public
function
testMakeComments
(
$expected
,
$comment_array
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
());
$this
->
assertEquals
(
$expected
,
$connection
->
makeComment
(
$comment_array
));
}
/**
* Dataprovider for testFilterComments().
*
* @return array
* Array of arrays with the following elements:
* - Expected filtered comment.
* - Comment to filter.
*/
public
function
providerFilterComments
()
{
return
array
(
array
(
''
,
''
),
array
(
'Exploit * / DROP TABLE node; --'
,
'Exploit * / DROP TABLE node; --'
),
array
(
'Exploit DROP TABLE node; --'
,
'Exploit */ DROP TABLE node; --'
),
);
}
/**
* Test Connection::filterComments().
*
* @dataProvider providerFilterComments
*/
public
function
testFilterComments
(
$expected
,
$comment
)
{
$mock_pdo
=
$this
->
getMock
(
'Drupal\Tests\Core\Database\Stub\StubPDO'
);
$connection
=
new
StubConnection
(
$mock_pdo
,
array
());
// filterComment() is protected, so we make it accessible with reflection.
$reflection
=
new
\
ReflectionClass
(
'Drupal\Tests\Core\Database\Stub\StubConnection'
);
$filter_comment
=
$reflection
->
getMethod
(
'filterComment'
);
$filter_comment
->
setAccessible
(
TRUE
);
$this
->
assertEquals
(
$expected
,
$filter_comment
->
invokeArgs
(
$connection
,
array
(
$comment
))
);
}
}
core/tests/Drupal/Tests/Core/Database/Stub/Driver/Schema.php
0 → 100644
View file @
6c410da2
<?php
/**
* @file
* Definition of Drupal\system\Tests\Database\Stub\Driver\Schema.
*/
namespace
Drupal\Tests\Core\Database\Stub\Driver
;
/**
* A very minimal class for testing purposes.
*
* @see ConnectionTest::testGetDriverClass()
* @see ConnectionTest::testSchema()
*/
class
Schema
{
// No-op.
}
core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
0 → 100644
View file @
6c410da2
<?php
/**
* @file
* Definition of Drupal\system\Tests\Database\Stub\StubConnection.
*/
namespace
Drupal\Tests\Core\Database\Stub
;
use
Drupal\Core\Database\Connection
;
use
Drupal\Core\Database\StatementEmpty
;
/**
* A stub of the abstract Connection class for testing purposes.
*
* Includes minimal implementations of Connection's abstract methods.
*/
class
StubConnection
extends
Connection
{
/**
* Public property so we can test driver loading mechanism.
*
* @var string
* @see driver().
*/
public
$driver
=
'stub'
;
/**
* {@inheritdoc}
*/
public
function
queryRange
(
$query
,
$from
,
$count
,
array
$args
=
array
(),
array
$options
=
array
())
{
return
new
StatementEmpty
();
}
/**
* {@inheritdoc}
*/
public
function
queryTemporary
(
$query
,
array
$args
=
array
(),
array
$options
=
array
())
{
return
''
;
}
/**
* {@inheritdoc}
*/
public
function
driver
()
{
return
$this
->
driver
;
}
/**
* {@inheritdoc}
*/
public
function
databaseType
()
{
return
'stub'
;
}
/**
* {@inheritdoc}
*/
public
function
createDatabase
(
$database
)
{
return
;
}
/**
* {@inheritdoc}
*/
public
function
mapConditionOperator
(
$operator
)
{
return
NULL
;
}
/**
* {@inheritdoc}
*/
public
function
nextId
(
$existing_id
=
0
)
{
return
0
;
}
}
core/tests/Drupal/Tests/Core/Database/Stub/StubPDO.php
0 → 100644
View file @
6c410da2
<?php
/**
* @file
* Definition of Drupal\system\Tests\Database\Stub\StubPDO.
*/
namespace
Drupal\Tests\Core\Database\Stub
;
/**
* A stub of \PDO for testing purposes.
*
* We override the constructor method so that PHPUnit can mock the \PDO class.
* \PDO itself can't be mocked, so we have to create a subclass. This subclass
* is being used to unit test Connection, so we don't need a functional database
* but we do need a mock \PDO object.
*
* @see Drupal\Tests\Core\Database\ConnectionTest
* @see Drupal\Core\Database\Connection
* @see http://stackoverflow.com/questions/3138946/mocking-the-pdo-object-using-phpunit
*/
class
StubPDO
extends
\
PDO
{
/**
* Construction method.
*
* We override this construction method with a no-op in order to mock \PDO
* under unit tests.
*
* @see http://stackoverflow.com/questions/3138946/mocking-the-pdo-object-using-phpunit
*/
public
function
__construct
()
{
// No-op.
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment