From e2524c6875318e7644aba997775a3762676e11b5 Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Tue, 10 Aug 2010 14:36:42 +0000
Subject: [PATCH] Fixed bug #15180: [Unit tests] t3lib_iconWorks and
 t3lib_SpriteManager (Thanks to Fabien Udriot)

git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@8553 709f56b5-9817-0410-a4d7-c38de5d9e867
---
 ChangeLog                               |   1 +
 tests/t3lib/t3lib_iconWorksTest.php     | 391 ++++++++++++++++++++++++
 tests/t3lib/t3lib_spritemanagerTest.php | 134 ++++++++
 3 files changed, 526 insertions(+)
 create mode 100644 tests/t3lib/t3lib_iconWorksTest.php
 create mode 100644 tests/t3lib/t3lib_spritemanagerTest.php

diff --git a/ChangeLog b/ChangeLog
index e3156571f912..453e83d620b7 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 2010-08-10  Christian Kuhn  <lolli@schwarzbu.ch>
 
+	* Fixed bug #15180: [Unit tests] t3lib_iconWorks and t3lib_SpriteManager (Thanks to Fabien Udriot)
 	* Follow-up to feature #15141: Add tests to t3lib_db to test storing of binary data (Thanks to Steffen Kamper)
 	* Added feature #15141: [Caching framework] Add compress data options to DbBackend
 	* Fixed bug #15383: [Unit tests] Add tests for t3lib_div::validEmail
diff --git a/tests/t3lib/t3lib_iconWorksTest.php b/tests/t3lib/t3lib_iconWorksTest.php
new file mode 100644
index 000000000000..a16306cc6ef9
--- /dev/null
+++ b/tests/t3lib/t3lib_iconWorksTest.php
@@ -0,0 +1,391 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Fabien Udriot <fabien.udriot@ecodev.ch>
+*  (c) 2010 Oliver Klee <typo3-coding@oliverklee.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script 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.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Testcase for class t3lib_iconWorks.
+ *
+ * @author Fabien Udriot <fabien.udriot@ecodev.ch>
+ * @author Oliver Klee <typo3-coding@oliverklee.de>
+ *
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+class t3lib_iconWorksTest extends tx_phpunit_testcase {
+	/**
+	 * @var array
+	 */
+	protected $mockRecord;
+
+	public function setUp() {
+			// Simulate a tt_content record
+		$this->mockRecord = array();
+		$this->mockRecord['header'] = 'dummy content header';
+		$this->mockRecord['uid'] = '1';
+		$this->mockRecord['pid'] = '1';
+		$this->mockRecord['image'] = '';
+		$this->mockRecord['hidden'] = '0';
+		$this->mockRecord['starttime'] = '0';
+		$this->mockRecord['endtime'] = '0';
+		$this->mockRecord['fe_group'] = '';
+		$this->mockRecord['CType'] = 'text';
+		$this->mockRecord['t3ver_id'] = '0';
+		$this->mockRecord['t3ver_state'] = '0';
+		$this->mockRecord['t3ver_wsid'] = '0';
+		$this->mockRecord['sys_language_uid'] = '0';
+		$this->mockRecord['l18n_parent'] = '0';
+		$this->mockRecord['subheader'] = '';
+		$this->mockRecord['bodytext'] = '';
+	}
+
+	public function tearDown() {
+		unset($this->mockRecord);
+	}
+
+
+	//////////////////////////////////////////
+	// Tests concerning getSpriteIconClasses
+	//////////////////////////////////////////
+
+	/**
+	 * Tests whether an empty string returns 't3-icon'
+	 * @test
+	 */
+	public function getSpriteIconClassesWithEmptyStringReturnsT3Icon() {
+		$this->assertEquals(
+			't3-icon',
+			t3lib_iconWorks::getSpriteIconClasses('')
+		);
+	}
+
+	/**
+	 * Tests whether one part returns 't3-icon'
+	 * @test
+	 */
+	public function getSpriteIconClassesWithOnePartReturnsT3Icon() {
+		$this->assertEquals(
+			't3-icon',
+			t3lib_iconWorks::getSpriteIconClasses('actions')
+		);
+	}
+
+	/**
+	 * Tests the return of two parts
+	 * @test
+	 */
+	public function getSpriteIconClassesWithTwoPartsReturnsT3IconAndCombinedParts() {
+		$result = explode(' ', t3lib_iconWorks::getSpriteIconClasses('actions-juggle'));
+		sort($result);
+
+		$this->assertEquals(
+			array('t3-icon', 't3-icon-actions', 't3-icon-actions-juggle', 't3-icon-juggle'),
+			$result
+		);
+	}
+
+	/**
+	 * Tests the return of tree parts
+	 * @test
+	 */
+	public function getSpriteIconClassesWithThreePartsReturnsT3IconAndCombinedParts() {
+		$result = explode(' ', t3lib_iconWorks::getSpriteIconClasses('actions-juggle-speed'));
+		sort($result);
+
+		$this->assertEquals(
+			array('t3-icon', 't3-icon-actions', 't3-icon-actions-juggle', 't3-icon-juggle-speed'),
+			$result
+		);
+	}
+
+	/**
+	 * Tests the return of four parts
+	 * @test
+	 */
+	public function getSpriteIconClassesWithFourPartsReturnsT3IconAndCombinedParts() {
+		$result = explode(' ', t3lib_iconWorks::getSpriteIconClasses('actions-juggle-speed-game'));
+		sort($result);
+
+		$this->assertEquals(
+			array('t3-icon', 't3-icon-actions', 't3-icon-actions-juggle', 't3-icon-juggle-speed-game'),
+			$result
+		);
+	}
+
+	//////////////////////////////////////////
+	// Tests concerning getSpriteIcon
+	//////////////////////////////////////////
+
+	/**
+	 * Tests whether an empty string returns a span with the missing sprite
+	 * @test
+	 */
+	public function getSpriteIconWithEmptyStringReturnsSpanWithIconMissingSprite() {
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-status t3-icon-status-status t3-icon-status-icon-missing"></span>',
+			t3lib_iconWorks::getSpriteIcon('')
+		);
+	}
+
+	/**
+	 * Tests whether an non existing icons returns a span with the missing sprite
+	 * @test
+	 */
+	public function getSpriteIconWithMissingIconReturnsSpanWithIconMissingSprite() {
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-status t3-icon-status-status t3-icon-status-icon-missing"></span>',
+			t3lib_iconWorks::getSpriteIcon('actions-juggle-speed')
+		);
+	}
+
+	/**
+	 * Tests whether an existing icon returns a span with the correct sprite
+	 * @test
+	 */
+	public function getSpriteIconWithExistingIconReturnsSpanWithIconSprite() {
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new"></span>',
+			t3lib_iconWorks::getSpriteIcon('actions-document-new')
+		);
+	}
+
+	/**
+	 * Tests the returns of an existing icon + an other attribute like title="foo"
+	 * @test
+	 */
+	public function getSpriteIconWithExistingIconAndAttributeReturnsSpanWithIconSpriteAndAttribute() {
+		$this->assertEquals(
+			'<span title="foo" class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new"></span>',
+			t3lib_iconWorks::getSpriteIcon('actions-document-new', array('title' => 'foo'))
+		);
+	}
+
+	/**
+	 * Tests the returns of an existing icon + a class attribute
+	 * @test
+	 */
+	public function getSpriteIconWithExistingIconAndClassAttributeReturnsSpanWithIconSpriteAndClassAttribute() {
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new foo"></span>',
+			t3lib_iconWorks::getSpriteIcon('actions-document-new', array('class' => 'foo'))
+		);
+	}
+
+	/**
+	 * Tests the returns of an existing icon + a class attribute
+	 * @test
+	 */
+	public function getSpriteIconWithExistingIconAndInnerHTMLReturnsSpanWithIconSpriteAndInnerHTML() {
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new">foo</span>',
+			t3lib_iconWorks::getSpriteIcon('actions-document-new', array('html' => 'foo'))
+		);
+	}
+
+	/**
+	 * Tests the returns of an existing icon + an overlay
+	 * @test
+	 */
+	public function getSpriteIconWithExistingIconAndOverlayReturnsSpanWithIconSpriteAndOverlay() {
+		$result = t3lib_iconWorks::getSpriteIcon('actions-document-new', array(), array('status-overlay-hidden' => array()));
+		$overlay = '<span class="t3-icon t3-icon-status t3-icon-status-overlay t3-icon-overlay-hidden t3-icon-overlay"></span>';
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new">' . $overlay . '</span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of an existing icon + an overlay
+	 * @test
+	 */
+	public function getSpriteIconWithExistingIconAndOverlayAndAttributesReturnsSpanWithIconSpriteAndOverlayAndAttributes() {
+		$result = t3lib_iconWorks::getSpriteIcon('actions-document-new', array('html' => 'foo1'), array('status-overlay-hidden' => array('class' => 'foo2')));
+		$overlay = '<span class="t3-icon t3-icon-status t3-icon-status-overlay t3-icon-overlay-hidden foo2 t3-icon-overlay">foo1</span>';
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-new">' . $overlay . '</span>',
+			$result
+		);
+	}
+
+
+	//////////////////////////////////////////
+	// Tests concerning getSpriteIconForRecord
+	//////////////////////////////////////////
+
+	/**
+	 * Tests the returns of null table + empty array
+	 * @test
+	 */
+	public function getSpriteIconForRecordWithNullTableReturnsMissingIcon() {
+		$result = t3lib_iconWorks::getSpriteIconForRecord('', array());
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-status t3-icon-status-status t3-icon-status-icon-missing"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of tt_content + empty record
+	 * @test
+	 */
+	public function getSpriteIconForRecordWithEmptyRecordReturnsNormalSprite() {
+		$result = t3lib_iconWorks::getSpriteIconForRecord('tt_content', array());
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-x t3-icon-x-content-text"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of tt_content + mock record
+	 * @test
+	 */
+	public function getSpriteIconForRecordWithMockRecordReturnsNormalSprite() {
+		$mockRecord = $this->mockRecord;
+		$result = t3lib_iconWorks::getSpriteIconForRecord('tt_content', $mockRecord);
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-x t3-icon-x-content-text"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of tt_content + mock record + options
+	 * @test
+	 */
+	public function getSpriteIconForRecordWithMockRecordAndOptionsReturnsNormalSprite() {
+		$mockRecord = $this->mockRecord;
+		$result = t3lib_iconWorks::getSpriteIconForRecord('tt_content', $mockRecord, array('class' => 'foo', 'title' => 'bar'));
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-x t3-icon-x-content-text foo" title="bar"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of tt_content + mock record of type 'list' (aka plugin)
+	 * @test
+	 */
+	public function getSpriteIconForRecordWithMockRecordOfTypePluginReturnsPluginSprite() {
+		$mockRecord = $this->mockRecord;
+		$mockRecord['CType'] = 'list';
+		$result = t3lib_iconWorks::getSpriteIconForRecord('tt_content', $mockRecord);
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-x t3-icon-x-content-plugin"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of tt_content + mock record with hidden flag
+	 * @test
+	 */
+	public function getSpriteIconForRecordWithMockRecordWithHiddenFlagReturnsNormalSpriteAndOverlay() {
+		$mockRecord = $this->mockRecord;
+		$mockRecord['hidden'] = '1';
+		$result = t3lib_iconWorks::getSpriteIconForRecord('tt_content', $mockRecord);
+		$overlay = '<span class="t3-icon t3-icon-status t3-icon-status-overlay t3-icon-overlay-hidden t3-icon-overlay"></span>';
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-x t3-icon-x-content-text">' . $overlay . '</span>',
+			$result
+		);
+	}
+
+
+	//////////////////////////////////////////
+	// Tests concerning getSpriteIconForFile
+	//////////////////////////////////////////
+
+	/**
+	 * Tests the returns of no file
+	 * @test
+	 */
+	public function getSpriteIconForFileWithNoFileTypeReturnsOtherSprite() {
+		$result = t3lib_iconWorks::getSpriteIconForFile('');
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-other t3-icon-other-other"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of unknown file
+	 * @test
+	 */
+	public function getSpriteIconForFileWithNoUnknowFileTypeReturnsOtherSprite() {
+		$result = t3lib_iconWorks::getSpriteIconForFile('foo');
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-other t3-icon-other-other"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of file pdf
+	 * @test
+	 */
+	public function getSpriteIconForFileWithPdfReturnsPdfSprite() {
+		$result = t3lib_iconWorks::getSpriteIconForFile('pdf');
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-pdf t3-icon-pdf"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of file png
+	 * @test
+	 */
+	public function getSpriteIconForFileWithPngReturnsPngSprite() {
+		$result = t3lib_iconWorks::getSpriteIconForFile('png');
+
+		$this->assertEquals(
+			'<span class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-media t3-icon-media-image"></span>',
+			$result
+		);
+	}
+
+	/**
+	 * Tests the returns of file png + option
+	 * @test
+	 */
+	public function getSpriteIconForFileWithPngAndOptionsReturnsPngSpriteAndOptions() {
+		$result = t3lib_iconWorks::getSpriteIconForFile('png', array('title' => 'bar'));
+
+		$this->assertEquals(
+			'<span title="bar" class="t3-icon t3-icon-mimetypes t3-icon-mimetypes-media t3-icon-media-image"></span>',
+			$result
+		);
+	}
+}
+?>
diff --git a/tests/t3lib/t3lib_spritemanagerTest.php b/tests/t3lib/t3lib_spritemanagerTest.php
new file mode 100644
index 000000000000..c7e863da473b
--- /dev/null
+++ b/tests/t3lib/t3lib_spritemanagerTest.php
@@ -0,0 +1,134 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Fabien Udriot <fabien.udriot@ecodev.ch>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script 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.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Testcase for class t3lib_SpriteManager.
+ *
+ * @author Fabien Udriot <fabien.udriot@ecodev.ch>
+ *
+ * @package TYPO3
+ * @subpackage t3lib
+ */
+class t3lib_SpriteManagerTest extends tx_phpunit_testcase {
+	/**
+	 * Enable backup of global and system variables
+	 */
+	public $backupGlobals = TRUE;
+
+
+	//////////////////////////////////////////
+	// Tests concerning addTcaTypeIcon
+	//////////////////////////////////////////
+
+	/**
+	 * @test
+	 */
+	public function addTcaTypeIconWithEmptyValueSetsArrayKey() {
+		t3lib_SpriteManager::addTcaTypeIcon('', '', '');
+		$this->assertArrayHasKey('tcarecords--', $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']);
+	}
+
+	/**
+	 * @test
+	 */
+	public function addTcaTypeIconWithEmptyValueSetsEmptyArrayValue() {
+		t3lib_SpriteManager::addTcaTypeIcon('', '', '');
+		$this->assertEquals('', $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']['tcarecords--']);
+	}
+
+	/**
+	 * @test
+	 */
+	public function addTcaTypeIconWithTableAndTypeSetsArrayKey() {
+		$table = 'tt_content';
+		$type = 'contains-news';
+		t3lib_SpriteManager::addTcaTypeIcon($table, $type, '');
+		$this->assertArrayHasKey('tcarecords-' . $table . '-' . $type, $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']);
+	}
+
+	/**
+	 * @test
+	 */
+	public function addTcaTypeIconWithTableAndTypeAndValueSetsArrayValue() {
+		$imagePath = 'path/to/my-icon.png';
+		$table = 'tt_content';
+		$type = 'contains-news';
+		t3lib_SpriteManager::addTcaTypeIcon($table, $type, $imagePath);
+		$this->assertEquals($imagePath, $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']['tcarecords-' . $table . '-' . $type]);
+	}
+
+
+	//////////////////////////////////////////
+	// Tests concerning addSingleIcons
+	//////////////////////////////////////////
+
+	/**
+	 * @test
+	 */
+	public function addSingleIconsWithEmptyValueSetsArrayKey() {
+		$type = '';
+		$imagePath = 'path/to/my-icon.png';
+		$icons = array($type => $imagePath);
+		$extensionKey = 'dummy';
+		t3lib_SpriteManager::addSingleIcons($icons, $extensionKey);
+		$this->assertArrayHasKey('extensions-' . $extensionKey . '-' . $type, $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']);
+	}
+
+	/**
+	 * @test
+	 */
+	public function addSingleIconsWithEmptyValueSetsImagePathValue() {
+		$type = '';
+		$imagePath = 'path/to/my-icon.png';
+		$icons = array($type => $imagePath);
+		$extensionKey = 'dummy';
+		t3lib_SpriteManager::addSingleIcons($icons, $extensionKey);
+		$this->assertEquals($imagePath, $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']['extensions-' . $extensionKey . '-' . $type]);
+	}
+
+	/**
+	 * @test
+	 */
+	public function addSingleIconsWithNormalValueSetsArrayKey() {
+		$type = 'contains-news';
+		$imagePath = 'path/to/my-icon.png';
+		$icons = array($type => $imagePath);
+		$extensionKey = 'dummy';
+		t3lib_SpriteManager::addSingleIcons($icons, $extensionKey);
+		$this->assertArrayHasKey('extensions-' . $extensionKey . '-' . $type, $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']);
+	}
+
+	/**
+	 * @test
+	 */
+	public function addSingleIconsWithNormalValueSetsImagePathValue() {
+		$type = 'contains-news';
+		$imagePath = 'path/to/my-icon.png';
+		$icons = array($type => $imagePath);
+		$extensionKey = 'dummy';
+		t3lib_SpriteManager::addSingleIcons($icons, $extensionKey);
+		$this->assertEquals($imagePath, $GLOBALS['TBE_STYLES']['spritemanager']['singleIcons']['extensions-' . $extensionKey . '-' . $type]);
+	}
+}
+?>
-- 
GitLab