--- /dev/null
+<?php
+
+namespace Shaarli;
+
+/**
+ * Class ThemeUtilsTest
+ *
+ * @package Shaarli
+ */
+class ThemeUtilsTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * Test getThemes() with existing theme directories.
+ */
+ public function testGetThemes()
+ {
+ $themes = ['theme1', 'default', 'Bl1p_- bL0p'];
+ foreach ($themes as $theme) {
+ mkdir('sandbox/tpl/'. $theme, 0755, true);
+ }
+
+ // include a file which should be ignored
+ touch('sandbox/tpl/supertheme');
+
+ $res = ThemeUtils::getThemes('sandbox/tpl/');
+ foreach ($res as $theme) {
+ $this->assertTrue(in_array($theme, $themes));
+ }
+ $this->assertFalse(in_array('supertheme', $res));
+
+ foreach ($themes as $theme) {
+ rmdir('sandbox/tpl/'. $theme);
+ }
+ unlink('sandbox/tpl/supertheme');
+ rmdir('sandbox/tpl');
+ }
+
+ /**
+ * Test getThemes() without any theme dir.
+ */
+ public function testGetThemesEmpty()
+ {
+ mkdir('sandbox/tpl/', 0755, true);
+ $this->assertEquals([], ThemeUtils::getThemes('sandbox/tpl/'));
+ rmdir('sandbox/tpl/');
+ }
+
+ /**
+ * Test getThemes() with an invalid path.
+ */
+ public function testGetThemesInvalid()
+ {
+ $this->assertEquals([], ThemeUtils::getThemes('nope'));
+ }
+}