blob: 0ef0b4780d38f5bafff3debc57281cf99c54df19 [file] [log] [blame]
<?php
/**
* ezcGraphDateAxisTest
*
* 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.
*
* @package Graph
* @version //autogen//
* @subpackage Tests
* @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved.
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
require_once dirname( __FILE__ ) . '/test_case.php';
/**
* Tests for ezcGraph class.
*
* @package Graph
* @subpackage Tests
*/
class ezcGraphDateAxisTest extends ezcGraphTestCase
{
protected $basePath;
protected $tempDir;
protected $chart;
public static function suite()
{
return new PHPUnit_Framework_TestSuite( "ezcGraphDateAxisTest" );
}
protected function setUp()
{
date_default_timezone_set( 'Europe/Berlin' );
static $i = 0;
$this->tempDir = $this->createTempDir( __CLASS__ . sprintf( '_%03d_', ++$i ) ) . '/';
$this->basePath = dirname( __FILE__ ) . '/data/';
$this->chart = new ezcGraphLineChart();
$this->chart->xAxis = new ezcGraphChartElementDateAxis();
}
protected function tearDown()
{
if ( !$this->hasFailed() )
{
$this->removeTempDir();
}
unset( $this->chart );
}
public function testManualScaling()
{
$this->chart->xAxis->startDate = 0;
$this->chart->xAxis->endDate = 100;
$this->chart->xAxis->interval = 10;
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array( 10 => 12, 37 => 235, 43 => 17, 114 => 39 ) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
0,
$this->chart->xAxis->startDate,
'Wrong starting date. '
);
$this->assertEquals(
100,
$this->chart->xAxis->endDate,
'Wrong end date. '
);
$this->assertEquals(
10,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testManualBoundingsForScaling()
{
$this->chart->xAxis->startDate = 0;
$this->chart->xAxis->endDate = 100;
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array( 10 => 12, 37 => 235, 43 => 17, 114 => 39 ) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
0,
$this->chart->xAxis->startDate,
'Wrong starting date. '
);
$this->assertEquals(
100,
$this->chart->xAxis->endDate,
'Wrong end date. '
);
$this->assertEquals(
10,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testManualIntervalForScaling()
{
$this->chart->xAxis->interval = 10;
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array( 10 => 12, 37 => 235, 43 => 17, 114 => 39 ) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
10,
$this->chart->xAxis->startDate,
'Wrong starting date. '
);
$this->assertEquals(
120,
$this->chart->xAxis->endDate,
'Wrong end date. '
);
$this->assertEquals(
10,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testAutomagicScalingSingle1()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array( 10 => 12, 37 => 235, 43 => 17, 114 => 39 ) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
0,
$this->chart->xAxis->startDate,
'Wrong starting date. '
);
$this->assertEquals(
120,
$this->chart->xAxis->endDate,
'Wrong end date. '
);
$this->assertEquals(
30,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testAutomagicScalingSingle2()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array( 30010 => 12, 30037 => 235, 30043 => 17, 30114 => 39 ) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
30000,
$this->chart->xAxis->startDate,
'Wrong starting date. '
);
$this->assertEquals(
30120,
$this->chart->xAxis->endDate,
'Wrong end date. '
);
$this->assertEquals(
30,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testAutomagicScalingSingle3()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
mktime( 10, 13, 57, 5, 7, 2006 ) => 324,
mktime( 10, 46, 13, 5, 7, 2006 ) => 324,
mktime( 11, 15, 45, 5, 7, 2006 ) => 324,
mktime( 12, 32, 01, 5, 7, 2006 ) => 324,
) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
'Sun, 07 May 2006 10:00:00 +0200',
date( 'r', $this->chart->xAxis->startDate ),
'Wrong starting date. '
);
$this->assertEquals(
'Sun, 07 May 2006 13:00:00 +0200',
date( 'r', $this->chart->xAxis->endDate ),
'Wrong end date. '
);
$this->assertEquals(
1800,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testAutomagicScalingSingle4()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
mktime( 10, 13, 57, 5, 7, 2006 ) => 324,
mktime( 17, 46, 13, 5, 7, 2006 ) => 324,
mktime( 11, 15, 45, 5, 8, 2006 ) => 324,
mktime( 20, 32, 1, 5, 8, 2006 ) => 324,
mktime( 8, 43, 19, 5, 9, 2006 ) => 324,
) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
'Sun, 07 May 2006 06:00:00 +0200',
date( 'r', $this->chart->xAxis->startDate ),
'Wrong starting date. '
);
$this->assertEquals(
'Tue, 09 May 2006 12:00:00 +0200',
date( 'r', $this->chart->xAxis->endDate ),
'Wrong end date. '
);
$this->assertEquals(
21600,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testAutomagicScalingSingle5()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
mktime( 1, 0, 0, 1, 1, 2001 ) => 324,
mktime( 1, 0, 0, 1, 1, 2002 ) => 324,
mktime( 1, 0, 0, 1, 1, 2003 ) => 324,
mktime( 1, 0, 0, 1, 1, 2004 ) => 324,
) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
'Mon, 01 Jan 2001 01:00:00 +0100',
date( 'r', $this->chart->xAxis->startDate ),
'Wrong starting date. '
);
$this->assertEquals(
'Thu, 01 Jan 2004 01:00:00 +0100',
date( 'r', $this->chart->xAxis->endDate ),
'Wrong end date. '
);
$this->assertEquals(
31536000,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testPositionLeft()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
mktime( 10, 13, 57, 5, 7, 2006 ) => 324,
mktime( 17, 46, 13, 5, 7, 2006 ) => 324,
mktime( 11, 15, 45, 5, 8, 2006 ) => 324,
mktime( 20, 32, 1, 5, 8, 2006 ) => 324,
mktime( 8, 43, 19, 5, 9, 2006 ) => 324,
) );
$this->chart->xAxis->position = ezcGraph::LEFT;
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
0.,
$this->chart->xAxis->getCoordinate( false ),
'Wrong initial axis position. ',
.05
);
$this->assertEquals(
0.,
$this->chart->xAxis->getCoordinate( mktime( 6, 0, 0, 5, 7, 2006 ) ),
'Wrong minimal value. ',
.05
);
$this->assertEquals(
.575,
$this->chart->xAxis->getCoordinate( mktime( 13, 1, 34, 5, 8, 2006 ) ),
'Wrong mid value. ',
.05
);
$this->assertEquals(
1.,
$this->chart->xAxis->getCoordinate( mktime( 12, 0, 0, 5, 9, 2006 ) ),
'Wrong maximum value. ',
.05
);
}
public function testPositionRight()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
mktime( 10, 13, 57, 5, 7, 2006 ) => 324,
mktime( 17, 46, 13, 5, 7, 2006 ) => 324,
mktime( 11, 15, 45, 5, 8, 2006 ) => 324,
mktime( 20, 32, 1, 5, 8, 2006 ) => 324,
mktime( 8, 43, 19, 5, 9, 2006 ) => 324,
) );
$this->chart->xAxis->position = ezcGraph::RIGHT;
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
1.,
$this->chart->xAxis->getCoordinate( false ),
'Wrong initial axis position. ',
.05
);
$this->assertEquals(
1.,
$this->chart->xAxis->getCoordinate( mktime( 6, 0, 0, 5, 7, 2006 ) ),
'Wrong minimal value. ',
.05
);
$this->assertEquals(
.425,
$this->chart->xAxis->getCoordinate( mktime( 13, 1, 34, 5, 8, 2006 ) ),
'Wrong mid value. ',
.05
);
$this->assertEquals(
0.,
$this->chart->xAxis->getCoordinate( mktime( 12, 0, 0, 5, 9, 2006 ) ),
'Wrong maximum value. ',
.05
);
}
public function testStrToTimeLabelConvertion()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
'1.1.2001' => 324,
'1.1.2002' => 324,
'1.1.2003' => 324,
'1.1.2004' => 324,
) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$this->assertEquals(
'Mon, 01 Jan 2001 01:00:00 +0100',
date( 'r', $this->chart->xAxis->startDate ),
'Wrong starting date. '
);
$this->assertEquals(
'Thu, 01 Jan 2004 01:00:00 +0100',
date( 'r', $this->chart->xAxis->endDate ),
'Wrong end date. '
);
$this->assertEquals(
31536000,
$this->chart->xAxis->interval,
'Wrong interval. '
);
}
public function testRenderedLabels()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
'1.1.2001' => 324,
'1.1.2002' => 324,
'1.1.2003' => 324,
'1.1.2004' => 324,
) );
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$steps = $this->chart->xAxis->getSteps();
$expectedLabels = array(
'2001', '2002', '2003', '2004'
);
foreach ( $steps as $nr => $step )
{
$this->assertSame(
$step->label,
$expectedLabels[$nr],
'Label not as expected'
);
}
}
public function testRenderedLabelsWithLabelFormattingCallback()
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
'1.1.2001' => 324,
'1.1.2002' => 324,
'1.1.2003' => 324,
'1.1.2004' => 324,
) );
$this->chart->xAxis->labelCallback = create_function(
'$label',
'return "*$label*";'
);
try
{
$this->chart->render( 500, 200 );
}
catch ( ezcGraphFontRenderingException $e )
{
// Ignore
}
$steps = $this->chart->xAxis->getSteps();
$expectedLabels = array(
'*2001*', '*2002*', '*2003*', '*2004*'
);
foreach ( $steps as $nr => $step )
{
$this->assertSame(
$step->label,
$expectedLabels[$nr],
'Label not as expected'
);
}
}
public function testStrToTimeLabelConvertionRendering()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$chart = new ezcGraphLineChart();
$chart->data['some data'] = new ezcGraphArrayDataSet( array(
'1.1.2001' => 12,
'1.1.2002' => 324,
'1.1.2003' => 238,
'1.1.2004' => 123,
) );
$chart->data['some data']->symbol = ezcGraph::DIAMOND;
$chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testFloatDataSetKeys()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
'231.1' => 12,
'651.2' => 324,
'3241.3' => 238,
'3292.4' => 123,
) );
$this->chart->data['some data']->symbol = ezcGraph::DIAMOND;
$this->chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testMonthInterval1()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
strtotime( '2006-10-16' ) => 7.78507871321,
strtotime( '2006-10-30' ) => 7.52224503765,
strtotime( '2006-11-20' ) => 7.29226557153,
strtotime( '2006-11-28' ) => 7.06228610541,
strtotime( '2006-12-05' ) => 6.66803559206,
strtotime( '2006-12-11' ) => 6.37234770705,
strtotime( '2006-12-28' ) => 6.04517453799,
) );
$this->chart->data['some data']->symbol = ezcGraph::DIAMOND;
$this->chart->xAxis->startDate = strtotime( '2006-10-01' );
$this->chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testMonthInterval2()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
strtotime( '2006-10-16' ) => 7.78507871321,
strtotime( '2006-10-30' ) => 7.52224503765,
strtotime( '2006-11-20' ) => 7.29226557153,
strtotime( '2006-11-28' ) => 7.06228610541,
strtotime( '2006-12-05' ) => 6.66803559206,
strtotime( '2006-12-11' ) => 6.37234770705,
strtotime( '2006-12-28' ) => 6.04517453799,
) );
$this->chart->xAxis->startDate = strtotime( '2006-10-04' );
$this->chart->data['some data']->symbol = ezcGraph::DIAMOND;
$this->chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testMonthInterval3()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
strtotime( '2006-10-16' ) => 7.78507871321,
strtotime( '2006-10-30' ) => 7.52224503765,
strtotime( '2006-11-20' ) => 7.29226557153,
strtotime( '2006-11-28' ) => 7.06228610541,
strtotime( '2006-12-05' ) => 6.66803559206,
strtotime( '2006-12-11' ) => 6.37234770705,
strtotime( '2006-12-28' ) => 6.04517453799,
) );
$this->chart->xAxis->endDate = strtotime( '2006-12-30' );
$this->chart->data['some data']->symbol = ezcGraph::DIAMOND;
$this->chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testMonthInterval4()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
strtotime( '2006-10-16' ) => 7.78507871321,
strtotime( '2006-10-30' ) => 7.52224503765,
strtotime( '2006-11-20' ) => 7.29226557153,
strtotime( '2006-11-28' ) => 7.06228610541,
strtotime( '2006-12-05' ) => 6.66803559206,
strtotime( '2006-12-11' ) => 6.37234770705,
strtotime( '2006-12-28' ) => 6.04517453799,
) );
$this->chart->xAxis->startDate = strtotime( '2006-10-03' );
$this->chart->xAxis->endDate = strtotime( '2007-01-01' );
$this->chart->data['some data']->symbol = ezcGraph::DIAMOND;
$this->chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testDateParsingException()
{
try
{
$this->chart->data['some data'] = new ezcGraphArrayDataSet( array(
'invalid time' => 7.78507871321,
) );
$this->chart->render( 500, 200 );
}
catch ( ezcGraphErrorParsingDateException $e )
{
return;
}
$this->fail( 'Expected ezcGraphErrorParsingDateException.' );
}
}
?>