<?php /** * ThemeInfo Test Class * * PHP version 5 * * Copyright (C) Villanova University 2010. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * @category VuFind * @package Tests * @author Demian Katz <demian.katz@villanova.edu> * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link https://vufind.org/wiki/development:testing:unit_tests Wiki */ namespace VuFindTest; use VuFindTheme\ThemeInfo; /** * ThemeInfo Test Class * * @category VuFind * @package Tests * @author Demian Katz <demian.katz@villanova.edu> * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link https://vufind.org/wiki/development:testing:unit_tests Wiki */ class ThemeInfoTest extends Unit\TestCase { /** * Path to theme fixtures * * @var string */ protected $fixturePath; /** * Constructor */ public function __construct() { $this->fixturePath = realpath(__DIR__ . '/../../fixtures/themes'); } /** * Test getBaseDir * * @return void */ public function testGetBaseDir() { $this->assertEquals($this->fixturePath, $this->getThemeInfo()->getBaseDir()); } /** * Test get/setTheme * * @return void */ public function testThemeSetting() { $ti = $this->getThemeInfo(); $this->assertEquals('parent', $ti->getTheme()); // default $ti->setTheme('child'); $this->assertEquals('child', $ti->getTheme()); } /** * Test setting invalid theme * * @return void * * @expectedException Exception * @expectedExceptionMessage Cannot load theme: invalid */ public function testInvalidTheme() { $this->getThemeInfo()->setTheme('invalid'); } /** * Test theme info * * @return void */ public function testGetThemeInfo() { $ti = $this->getThemeInfo(); $ti->setTheme('child'); $this->assertEquals(['child' => ['extends' => 'parent'], 'parent' => ['extends' => false]], $ti->getThemeInfo()); } /** * Test unfindable item. * * @return void */ public function testUnfindableItem() { $this->assertNull($this->getThemeInfo()->findContainingTheme('does-not-exist')); } /** * Test findContainingTheme() * * @return void */ public function testFindContainingTheme() { $ti = $this->getThemeInfo(); $ti->setTheme('child'); $this->assertEquals('child', $ti->findContainingTheme('child.txt')); $this->assertEquals('parent', $ti->findContainingTheme('parent.txt')); $this->assertEquals($this->fixturePath . '/parent/parent.txt', $ti->findContainingTheme('parent.txt', true)); $expected = ['theme' => 'parent', 'path' => $this->fixturePath . '/parent/parent.txt']; $this->assertEquals($expected, $ti->findContainingTheme('parent.txt', ThemeInfo::RETURN_ALL_DETAILS)); } /** * Get a test object * * @return ThemeInfo */ protected function getThemeInfo() { return new ThemeInfo($this->fixturePath, 'parent'); } }