Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

- Merge [4597] and [4600].

  • Loading branch information...
commit 9db934b9c462e7d4f0d6765f912f3e04b49a7720 1 parent 7a224a9
@sebastianbergmann authored
View
109 PHPUnit/Extensions/Database/DataSet/Persistors/Yaml.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2002-2009, Sebastian Bergmann <sb@sebastian-bergmann.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the name of Sebastian Bergmann nor the names of his
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category Testing
+ * @package PHPUnit
+ * @author Mike Lively <m@digitalsandwich.com>
+ * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version SVN: $Id: Abstract.php 4402 2008-12-31 09:25:57Z sb $
+ * @link http://www.phpunit.de/
+ * @since File available since Release 3.2.0
+ */
+
+require_once 'PHPUnit/Framework.php';
+require_once 'PHPUnit/Util/Filter.php';
+
+require_once 'PHPUnit/Extensions/Database/DataSet/IPersistable.php';
+require_once 'PHPUnit/Util/YAML/sfYaml.class.php';
+
+PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
+
+
+/**
+ * A yaml dataset persistor
+ *
+ * @category Testing
+ * @package PHPUnit
+ * @author Mike Lively <m@digitalsandwich.com>
+ * @copyright 2009 Mike Lively <m@digitalsandwich.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version Release: @package_version@
+ * @link http://www.phpunit.de/
+ * @since Class available since Release 3.2.0
+ */
+class PHPUnit_Extensions_Database_DataSet_Persistors_Yaml implements PHPUnit_Extensions_Database_DataSet_IPersistable
+{
+ /**
+ * @var string
+ */
+ protected $filename;
+
+ /**
+ * Sets the filename that this persistor will save to.
+ *
+ * @param string $filename
+ */
+ public function setFileName($filename)
+ {
+ $this->filename = $filename;
+ }
+
+ /**
+ * Writes the dataset to a yaml file
+ *
+ * @param PHPUnit_Extensions_Database_DataSet_IDataSet $dataset
+ */
+ public function write(PHPUnit_Extensions_Database_DataSet_IDataSet $dataset)
+ {
+ $phpArr = array();
+
+ foreach ($dataset as $table)
+ {
+ $tableName = $table->getTableMetaData()->getTableName();
+ $phpArr[$tableName] = array();
+
+ for ($i = 0; $i < $table->getRowCount(); $i++)
+ {
+ $phpArr[$tableName][] = $table->getRow($i);
+ }
+ }
+
+ file_put_contents($this->filename, $yamlString);
+ }
+}
+
+?>
View
150 PHPUnit/Extensions/Database/DataSet/YamlDataSet.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2002-2009, Sebastian Bergmann <sb@sebastian-bergmann.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the name of Sebastian Bergmann nor the names of his
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category Testing
+ * @package PHPUnit
+ * @author Mike Lively <m@digitalsandwich.com>
+ * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version SVN: $Id: CsvDataSet.php 4402 2008-12-31 09:25:57Z sb $
+ * @link http://www.phpunit.de/
+ * @since File available since Release 3.2.0
+ */
+
+require_once 'PHPUnit/Util/Filter.php';
+
+require_once 'PHPUnit/Extensions/Database/DataSet/AbstractDataSet.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableIterator.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTable.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableMetaData.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/Persistors/Yaml.php';
+require_once 'PHPUnit/Util/YAML/sfYaml.class.php';
+
+PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
+
+/**
+ * Creates CsvDataSets.
+ *
+ * You can incrementally add CSV files as tables to your datasets
+ *
+ * @category Testing
+ * @package PHPUnit
+ * @author Mike Lively <m@digitalsandwich.com>
+ * @copyright 2009 Mike Lively <m@digitalsandwich.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version Release: @package_version@
+ * @link http://www.phpunit.de/
+ * @since Class available since Release 3.3.0
+ */
+class PHPUnit_Extensions_Database_DataSet_YamlDataSet extends PHPUnit_Extensions_Database_DataSet_AbstractDataSet
+{
+ /**
+ * @var array
+ */
+ protected $tables = array();
+
+ /**
+ * Creates a new YAML dataset
+ *
+ * @param string $yamlFile
+ * @param string $enclosure
+ * @param string $escape
+ */
+ public function __construct($yamlFile)
+ {
+ $this->addYamlFile($yamlFile);
+ }
+
+ /**
+ * Adds a new yaml file to the dataset.
+ * @param string $yamlFile
+ */
+ public function addYamlFile($yamlFile)
+ {
+ $data = sfYaml::load($yamlFile);
+
+ foreach ($data as $tableName => $rows)
+ {
+ if (!is_array($rows)) {
+ continue;
+ }
+
+ if (!array_key_exists($tableName, $this->tables))
+ {
+ $columns = count($rows) ? array_keys(current($rows)) : array();
+
+ $tableMetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($tableName, $columns);
+
+ $this->tables[$tableName] = new PHPUnit_Extensions_Database_DataSet_DefaultTable($tableMetaData);
+ }
+
+ foreach ($rows as $row)
+ {
+ $this->tables[$tableName]->addRow($row);
+ }
+ }
+ }
+
+ /**
+ * Creates an iterator over the tables in the data set. If $reverse is
+ * true a reverse iterator will be returned.
+ *
+ * @param bool $reverse
+ * @return PHPUnit_Extensions_Database_DataSet_ITableIterator
+ */
+ protected function createIterator($reverse = FALSE)
+ {
+ return new PHPUnit_Extensions_Database_DataSet_DefaultTableIterator($this->tables, $reverse);
+ }
+
+ /**
+ * Saves a given $dataset to $filename in YAML format
+ * @param PHPUnit_Extensions_Database_DataSet_IDataSet $dataset
+ * @param string $filename
+ */
+ public static function write(PHPUnit_Extensions_Database_DataSet_IDataSet $dataset, $filename)
+ {
+ $pers = new PHPUnit_Extensions_Database_DataSet_Persistors_Yaml();
+ $pers->setFileName($filename);
+
+ try {
+ $pers->write($dataset);
+ } catch (RuntimeException $e) {
+ throw new RuntimeException(__METHOD__ . ' called with an unwritable file.');
+ }
+ }
+}
+?>
View
134 PHPUnit/Tests/Extensions/Database/DataSet/YamlDataSetTest.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2002-2009, Sebastian Bergmann <sb@sebastian-bergmann.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the name of Sebastian Bergmann nor the names of his
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @category Testing
+ * @package PHPUnit
+ * @author Mike Lively <m@digitalsandwich.com>
+ * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version SVN: $Id: CsvDataSetTest.php 4402 2008-12-31 09:25:57Z sb $
+ * @link http://www.phpunit.de/
+ * @since File available since Release 3.2.0
+ */
+
+require_once 'PHPUnit/Framework/TestCase.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/DefaultDataSet.php';
+require_once 'PHPUnit/Extensions/Database/TestCase.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTable.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableMetaData.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/YamlDataSet.php';
+
+/**
+ * @category Testing
+ * @package PHPUnit
+ * @author Mike Lively <m@digitalsandwich.com>
+ * @copyright 2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version SVN: $Id: CsvDataSetTest.php 4402 2008-12-31 09:25:57Z sb $
+ * @link http://www.phpunit.de/
+ * @since File available since Release 3.3.0
+ */
+class Extensions_Database_DataSet_YamlDataSetTest extends PHPUnit_Framework_TestCase
+{
+ protected $expectedDataSet;
+
+ public function testYamlDataSet()
+ {
+ $table1MetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData(
+ 'table1', array('table1_id', 'column1', 'column2', 'column3', 'column4')
+ );
+ $table2MetaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData(
+ 'table2', array('table2_id', 'column5', 'column6', 'column7', 'column8')
+ );
+
+ $table1 = new PHPUnit_Extensions_Database_DataSet_DefaultTable($table1MetaData);
+ $table2 = new PHPUnit_Extensions_Database_DataSet_DefaultTable($table2MetaData);
+
+ $table1->addRow(array(
+ 'table1_id' => 1,
+ 'column1' => 'tgfahgasdf',
+ 'column2' => 200,
+ 'column3' => 34.64,
+ 'column4' => 'yghkf;a hahfg8ja h;'
+ ));
+ $table1->addRow(array(
+ 'table1_id' => 2,
+ 'column1' => 'hk;afg',
+ 'column2' => 654,
+ 'column3' => 46.54,
+ 'column4' => '24rwehhads'
+ ));
+ $table1->addRow(array(
+ 'table1_id' => 3,
+ 'column1' => 'ha;gyt',
+ 'column2' => 462,
+ 'column3' => 1654.4,
+ 'column4' => 'asfgklg'
+ ));
+
+ $table2->addRow(array(
+ 'table2_id' => 1,
+ 'column5' => 'fhah',
+ 'column6' => 456,
+ 'column7' => 46.5,
+ 'column8' => 'fsdb, ghfdas'
+ ));
+ $table2->addRow(array(
+ 'table2_id' => 2,
+ 'column5' => 'asdhfoih',
+ 'column6' => 654,
+ 'column7' => 'blah',
+ 'column8' => '43asd "fhgj" sfadh'
+ ));
+ $table2->addRow(array(
+ 'table2_id' => 3,
+ 'column5' => 'ajsdlkfguitah',
+ 'column6' => 654,
+ 'column7' => 'blah',
+ 'column8' => 'thesethasdl
+asdflkjsadf asdfsadfhl "adsf, halsdf" sadfhlasdf'
+ ));
+
+ $expectedDataSet = new PHPUnit_Extensions_Database_DataSet_DefaultDataSet(array($table1, $table2));
+
+ $yamlDataSet = new PHPUnit_Extensions_Database_DataSet_YamlDataSet(dirname(__FILE__) . '/../_files/YamlDataSets/testDataSet.yaml');
+
+ PHPUnit_Extensions_Database_DataSet_YamlDataSet::write($yamlDataSet, '/tmp/yaml.dataset');
+
+ PHPUnit_Extensions_Database_TestCase::assertDataSetsEqual($expectedDataSet, $yamlDataSet);
+ }
+}
+?>
View
40 PHPUnit/Tests/Extensions/Database/_files/YamlDataSets/testDataSet.yaml
@@ -0,0 +1,40 @@
+table1:
+ -
+ table1_id: 1
+ column1: "tgfahgasdf"
+ column2: 200
+ column3: 34.64
+ column4: "yghkf;a hahfg8ja h;"
+ -
+ table1_id: 2
+ column1: "hk;afg"
+ column2: 654
+ column3: 46.54
+ column4: 24rwehhads
+ -
+ table1_id: 3
+ column1: ha;gyt
+ column2: 462
+ column3: 1654.4
+ column4: asfgklg
+table2:
+ -
+ table2_id: 1
+ column5: fhah
+ column6: 456
+ column7: 46.5
+ column8: "fsdb, ghfdas"
+ -
+ table2_id: 2
+ column5: asdhfoih
+ column6: 654
+ column7: blah
+ column8: "43asd \"fhgj\" sfadh"
+ -
+ table2_id: 3
+ column5: ajsdlkfguitah
+ column6: 654
+ column7: blah
+ column8: |-
+ thesethasdl
+ asdflkjsadf asdfsadfhl "adsf, halsdf" sadfhlasdf
Please sign in to comment.
Something went wrong with that request. Please try again.