blob: 2baa23a9ec86f018dc9069db19bef554c19be982 [file] [log] [blame]
<?php
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @version //autogentag//
* @filesource
* @package Configuration
* @subpackage Tests
*/
/**
* @package Configuration
* @subpackage Tests
*/
class ezcConfigurationArrayWriterTest extends ezcTestCase
{
private $tempDir;
protected function setUp()
{
if ( !ezcBaseFeatures::hasExtensionSupport( 'posix' ) )
{
$this->markTestSkipped( 'ext/posix is required for this test.' );
}
$this->tempDir = $this->createTempDir( 'ezcConfigurationArrayWriterTest' );
}
protected function tearDown()
{
$this->removeTempDir();
}
public function testConfigSettingUseComments()
{
$backend = new ezcConfigurationArrayWriter();
$backend->setOptions( array ( 'useComments' => true ) );
$backend->setOptions( array ( 'useComments' => false ) );
}
public function testConfigSettingUseCommentsWrongType()
{
$backend = new ezcConfigurationArrayWriter();
try
{
$backend->setOptions( array ( 'useComments' => 'tests/translations' ) );
$this->fail( 'Expected exception was not thrown' );
}
catch ( ezcBaseSettingValueException $e )
{
self::assertEquals( "The value 'tests/translations' that you were trying to assign to setting 'useComments' is invalid. Allowed values are: bool", $e->getMessage() );
}
}
public function testConfigSettingPermissions()
{
$backend = new ezcConfigurationArrayWriter();
$backend->setOptions( array ( 'permissions' => 0660 ) );
}
public function testConfigSettingPermissionsWrongType()
{
$backend = new ezcConfigurationArrayWriter();
try
{
$backend->setOptions( array ( 'permissions' => 'tests/translations' ) );
$this->fail( 'Expected exception was not thrown' );
}
catch ( ezcBaseSettingValueException $e )
{
self::assertEquals( "The value 'tests/translations' that you were trying to assign to setting 'permissions' is invalid. Allowed values are: int, 0 - 0777", $e->getMessage() );
}
}
public function testConfigSettingPermissionsOutOfRange1()
{
$backend = new ezcConfigurationArrayWriter();
try
{
$backend->setOptions( array ( 'permissions' => -1 ) );
$this->fail( 'Expected exception was not thrown' );
}
catch ( ezcBaseSettingValueException $e )
{
self::assertEquals( "The value '-1' that you were trying to assign to setting 'permissions' is invalid. Allowed values are: int, 0 - 0777", $e->getMessage() );
}
}
public function testConfigSettingPermissionsOutOfRange2()
{
$backend = new ezcConfigurationArrayWriter();
try
{
$backend->setOptions( array ( 'permissions' => 01000 ) );
$this->fail( 'Expected exception was not thrown' );
}
catch ( ezcBaseSettingValueException $e )
{
self::assertEquals( "The value '512' that you were trying to assign to setting 'permissions' is invalid. Allowed values are: int, 0 - 0777", $e->getMessage() );
}
}
public function testGetOptions()
{
$backend = new ezcConfigurationArrayWriter();
$backend->setOptions( array ( 'useComments' => true, 'permissions' => 0600 ) );
$this->assertEquals( array ( 'useComments' => true, 'permissions' => 0600 ), $backend->getOptions() );
}
public function testConfigSettingBroken()
{
$backend = new ezcConfigurationArrayWriter();
try
{
$backend->setOptions( array ( 'lOcAtIOn' => 'tests/translations' ) );
$this->fail( 'Expected exception was not thrown' );
}
catch ( ezcBaseSettingNotFoundException $e )
{
self::assertEquals( "The setting 'lOcAtIOn' is not a valid configuration setting.", $e->getMessage() );
}
}
public function testInitCtor1()
{
$backend = new ezcConfigurationArrayWriter( 'files/write_basic.php', new ezcConfiguration() );
$this->assertEquals( 'files', $backend->getLocation() );
$this->assertEquals( 'write_basic', $backend->getName() );
$this->assertSame( 0666, $this->readAttribute( $backend, 'permissions' ) );
}
public function testInitCtor2()
{
$backend = new ezcConfigurationArrayWriter( 'files.foo/write_basic.php', new ezcConfiguration(), 0660 );
$this->assertEquals( 'files.foo', $backend->getLocation() );
$this->assertEquals( 'write_basic', $backend->getName() );
$this->assertSame( 0660, $this->readAttribute( $backend, 'permissions' ) );
}
public function testInitCtor3()
{
try
{
$backend = new ezcConfigurationArrayWriter( 'files.foo/basic.f', new ezcConfiguration() );
$this->fail( 'Expected exception not thrown' );
}
catch ( ezcConfigurationInvalidSuffixException $e )
{
$this->assertEquals( "The path 'files.foo/basic.f' has an invalid suffix (should be '.php').", $e->getMessage() );
}
}
public function testInitMethod1()
{
$backend = new ezcConfigurationArrayWriter();
$backend->init( 'files', 'write_basic', new ezcConfiguration() );
$this->assertEquals( 'files', $backend->getLocation() );
$this->assertEquals( 'write_basic', $backend->getName() );
}
public function testNoConfigObjectToSafe()
{
try
{
$backend = new ezcConfigurationArrayWriter();
$backend->save();
$this->fail( 'Expected exception not thrown' );
}
catch ( ezcConfigurationNoConfigObjectException $e )
{
$this->assertEquals( 'There is no config object to save.', $e->getMessage() );
}
}
public function testEmptyFile()
{
$test = new ezcConfiguration();
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/empty.php', $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/empty.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function testOneGroup()
{
$settings = array(
'TheOnlyGroup' => array(
'Setting1' => true,
'SettingNoComment' => 42,
'MultiRow' => false,
)
);
$comments = array(
'TheOnlyGroup' => array(
'#' => "Just one group",
'Setting1' => " This setting sucks",
'MultiRow' => " Multi\n row\n comment",
)
);
$test = new ezcConfiguration( $settings, $comments );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/one-group.php', $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/one-group.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function testOneGroupWithSetConfig()
{
$settings = array(
'TheOnlyGroup' => array(
'Setting1' => true,
'SettingNoComment' => 42,
'MultiRow' => false,
)
);
$comments = array(
'TheOnlyGroup' => array(
'#' => "Just one group",
'Setting1' => " This setting sucks",
'MultiRow' => " Multi\n row\n comment",
)
);
$test = new ezcConfiguration( $settings, $comments );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/one-group.php', new ezcConfiguration() );
$backend->setConfig( $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/one-group.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function testOneGroupNoComments()
{
$settings = array(
'TheOnlyGroup' => array(
'Setting1' => true,
'SettingNoComment' => 42,
'MultiRow' => false,
)
);
$comments = array(
'TheOnlyGroup' => array(
'#' => "Just one group",
'Setting1' => " This setting sucks",
'MultiRow' => " Multi\n row\n comment",
)
);
$test = new ezcConfiguration( $settings, $comments );
$expected = new ezcConfiguration( $settings, array() );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/one-group-no-comments.php', $test );
$backend->setOptions( array ( 'useComments' => false ) );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/one-group-no-comments.php' );
$return = $backend->load();
$this->assertEquals( $expected, $return );
}
public function testTwoGroups()
{
$settings = array(
'NotTheOnlyGroup' => array(
'Setting1' => true,
),
'TheSecond' => array(
'Setting1' => false,
),
);
$comments = array(
'NotTheOnlyGroup' => array(
'#' => " Not just one group",
),
'TheSecond' => array(
'#' => " The second group",
),
);
$test = new ezcConfiguration( $settings, $comments );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/two-groups.php', $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/two-groups.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function testFormats()
{
$settings = array(
'FormatTest' => array(
'Decimal1' => 42,
'Decimal2' => 0,
'MaxSize' => 400,
'MinSize' => 0,
'Hex1' => 11189196,
'Hex2' => 11189196,
'Hex3' => 11189196,
'Hex4' => 11189196,
'TextColor' => 66302,
'Octal1' => 1,
'Octal2' => 458,
'Permission' => 438,
'Float1' => 0.2,
'Float2' => .8123,
'Float3' => 314e-2,
'Float4' => 3.141592654e1,
'Price' => 10.4,
'Seed' => 10e5,
'String1' => 'Blah blah blah',
'String2' => 'Derick "Tiger" Rethans',
'String3' => 'Foo \\ Bar',
'String4' => 'Foo \\',
)
);
$comments = array(
);
$test = new ezcConfiguration( $settings, $comments );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/formats.php', $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/formats.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function test2D()
{
$settings = array(
'2D-numbered' => array(
'Decimal' => array( 42, 0 ),
'Mixed' => array( 42, 0.812, false, "Derick \"Tiger\" Rethans" ),
),
'2D-associative' => array(
'Decimal' => array( 'a' => 42, 'b' => 0 ),
'Mixed' => array( 'a' => 42, 1 => 0.812, 'b' => false, 2 => "Derick \"Tiger\" Rethans" ),
),
);
$comments = array(
);
$test = new ezcConfiguration( $settings, $comments );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/multi-dim.php', $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/multi-dim.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function test3D()
{
$settings = array(
'3D' => array(
'Decimal' => array( 42, 0 ),
'Array' => array(
'Decimal' => array( 'a' => 42, 'b' => 0 ),
'Mixed' => array( 'b' => false, 2 => "Derick \"Tiger\" Rethans" ),
),
),
);
$comments = array(
'3D' => array(
'Decimal' => array( " One with a comment", " Second one with a comment" ),
'Array' => array(
'Mixed' => array( 2 => " One with a comment" ),
),
),
);
$test = new ezcConfiguration( $settings, $comments );
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/multi-dim2.php', $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $this->tempDir . '/multi-dim2.php' );
$return = $backend->load();
$this->assertEquals( $test, $return );
}
public function testFilePermissionsDefault()
{
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/empty.php', new ezcConfiguration() );
$oldUmask = umask( 0 );
$backend->save();
umask( $oldUmask );
$stat = stat( $this->tempDir . '/empty.php' );
$this->assertEquals( POSIX_S_IFREG | 0666, $stat['mode'] );
}
public function testFilePermissions1()
{
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/empty.php', new ezcConfiguration() );
$oldUmask = umask( 0 );
$backend->setOptions( array ( 'permissions' => 0660 ) );
$backend->save();
umask( $oldUmask );
$stat = stat( $this->tempDir . '/empty.php' );
$this->assertEquals( POSIX_S_IFREG | 0660, $stat['mode'] );
}
public function testFilePermissions2()
{
$backend = new ezcConfigurationArrayWriter( $this->tempDir . '/empty.php', new ezcConfiguration() );
$oldUmask = umask( 0 );
$backend->setOptions( array ( 'permissions' => 0640 ) );
$backend->save();
umask( $oldUmask );
$stat = stat( $this->tempDir . '/empty.php' );
$this->assertEquals( POSIX_S_IFREG | 0640, $stat['mode'] );
}
public function testValidationNonStrict()
{
$settings = array(
'3D' => array(
'Decimal' => array( 42, 0 ),
'Array' => array(
'Decimal' => array( 'a' => 42, 'b' => 0 ),
'Mixed' => array( 'b' => false, 2 => "Derick \"Tiger\" Rethans" ),
),
),
);
$comments = array(
'3D' => array(
'Decimal' => array( " One with a comment", " Second one with a comment" ),
'Array' => array(
'Mixed' => array( 2 => " One with a comment" ),
),
),
);
$test = new ezcConfiguration( $settings, $comments );
$path = $this->tempDir . '/multi-dim2.php';
$backend = new ezcConfigurationArrayWriter( $path, $test );
$backend->save();
$backend = new ezcConfigurationArrayReader( $path );
$return = $backend->validate( false );
$expected = new ezcConfigurationValidationResult( $backend->getLocation(), $backend->getName(), $path );
$expected->isValid = true;
$this->assertEquals( $expected, $return );
}
/*
public function testWriteFailure()
{
}
*/
public static function suite()
{
return new PHPUnit_Framework_TestSuite( 'ezcConfigurationArrayWriterTest' );
}
}
?>