sir_trevor-8.x-1.x-dev/tests/src/Unit/IconSvgMergerTest.php

tests/src/Unit/IconSvgMergerTest.php
<?php

namespace Drupal\sir_trevor\Tests\Unit;

use Drupal\sir_trevor\IconSvgMerger;
use Psr\Log\LogLevel;
use Symfony\Component\HttpKernel\Tests\Logger;

/**
 * @package Drupal\sir_trevor\Tests
 * @group SirTrevor
 */
class IconSvgMergerTest extends \PHPUnit_Framework_TestCase {
  /** @var Logger */
  protected $logger;

  public function setUp() {
    parent::setUp();
    $this->logger = new Logger();
  }

  /**
   * @test
   */
  public function givenNoFilesProducesNothing() {
    $sut = new IconSvgMerger($this->logger);

    $expected = file_get_contents(__DIR__ . '/fixtures/noSymbols-exported.svg');
    $this->assertSame($expected, $sut->merge([]));
  }

  /**
   * Dataprovider for @see fileWarnings
   * @return array
   */
  public function fileWarningTestDataProvider() {
    $testData = [];

    $testData['non existing file'] = [
      'filename' => 'non-existing.file',
      'warning message' => 'non-existing.file does not exist.',
    ];

    $testData['non xml file'] = [
      'filename' => __DIR__ . '/fixtures/non-xml-file.txt',
      'warning message' => __DIR__ . '/fixtures/non-xml-file.txt does not contain valid xml.',
    ];

    return $testData;
  }

  /**
   * @test
   * @dataProvider fileWarningTestDataProvider
   * @param string $fileName
   * @param string $warningMessage
   */
  public function fileWarnings($fileName, $warningMessage) {
    $sut = new IconSvgMerger($this->logger);

    $sut->merge([$fileName]);
    $this->assertWarningLogged($warningMessage);
  }

  /**
   * @test
   */
  public function givenSingleSvg_returnsItsUnchangedContents() {
    $sut = new IconSvgMerger($this->logger);
    $fileName = __DIR__ . '/fixtures/singleSymbol-exported.svg';

    $expected = file_get_contents($fileName);
    $this->assertEqualIgnoringWhiteSpace($expected, $sut->merge([$fileName]));
  }

  /**
   * @test
   */
  public function givenMultipleSvgFiles_returnsTheirMergedContents() {
    $sut = new IconSvgMerger($this->logger);

    $filenames = [
      __DIR__ . '/fixtures/singleSymbol.svg',
      __DIR__ . '/fixtures/twoSymbols.svg',
    ];

    $expected = file_get_contents(__DIR__ . '/fixtures/threeSymbols-exported.svg');
    $this->assertEqualIgnoringWhiteSpace($expected, $sut->merge($filenames));
  }


  /**
   * @param string $expectedWarning
   */
  private function assertWarningLogged($expectedWarning) {
    $this->assertContains($expectedWarning, $this->logger->getLogs(LogLevel::WARNING));
  }

  /**
   * @param string $expected
   * @param string $actual
   */
  private function assertEqualIgnoringWhiteSpace($expected, $actual) {
    $this->assertEquals($this->removeWhitespace($expected), $this->removeWhitespace($actual));
  }

  /**
   * @param string $string
   * @return string
   */
  private function removeWhitespace($string) {
    return preg_replace('/[\s]+/', '', $string);
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc