You are here

protected function ThemeTest::getTestFiles in Image Lazyloader 8

Gets a list of files that can be used in tests.

The first time this method is called, it will call simpletest_generate_file() to generate binary and ASCII text files in the public:// directory. It will also copy all files in core/modules/simpletest/files to public://. These contain image, SQL, PHP, JavaScript, and HTML files.

All filenames are prefixed with their type and have appropriate extensions:

  • text-*.txt
  • binary-*.txt
  • html-*.html and html-*.txt
  • image-*.png, image-*.jpg, and image-*.gif
  • javascript-*.txt and javascript-*.script
  • php-*.txt and php-*.php
  • sql-*.txt and sql-*.sql

Any subsequent calls will not generate any new files, or copy the files over again. However, if a test class adds a new file to public:// that is prefixed with one of the above types, it will get returned as well, even on subsequent calls.

Parameters

string $type: File type, possible values: 'binary', 'html', 'image', 'javascript', 'php', 'sql', 'text'.

int $size: (optional) File size in bytes to match. Defaults to NULL, which will not filter the returned list by size.

Return value

array List of files in public:// that match the filter(s).

1 call to ThemeTest::getTestFiles()
ThemeTest::setUp in tests/src/Kernel/ThemeTest.php

File

tests/src/Kernel/ThemeTest.php, line 162

Class

ThemeTest
Tests Lazyloaders theme integration.

Namespace

Drupal\Tests\lazyloader\Kernel

Code

protected function getTestFiles($type, $size = NULL) {

  /** @var \Drupal\Core\File\FileSystemInterface $file_system */
  $file_system = \Drupal::service('file_system');
  if (empty($this->generatedTestFiles)) {

    // Generate binary test files.
    $lines = [
      64,
      1024,
    ];
    $count = 0;
    foreach ($lines as $line) {
      $this
        ->generateFile('binary-' . $count++, 64, $line, 'binary');
    }

    // Generate ASCII text test files.
    $lines = [
      16,
      256,
      1024,
      2048,
      20480,
    ];
    $count = 0;
    foreach ($lines as $line) {
      $this
        ->generateFile('text-' . $count++, 64, $line, 'text');
    }

    // Copy other test files from fixtures.
    $original = \Drupal::root() . '/core/tests/fixtures/files';
    $files = $file_system
      ->scanDirectory($original, '/(html|image|javascript|php|sql)-.*/');
    foreach ($files as $file) {
      $file_system
        ->copy($file->uri, PublicStream::basePath());
    }
    $this->generatedTestFiles = TRUE;
  }
  $files = [];

  // Make sure type is valid.
  if (in_array($type, [
    'binary',
    'html',
    'image',
    'javascript',
    'php',
    'sql',
    'text',
  ])) {
    $files = $file_system
      ->scanDirectory('public://', '/' . $type . '\\-.*/');

    // If size is set then remove any files that are not of that size.
    if ($size !== NULL) {
      foreach ($files as $file) {
        $stats = stat($file->uri);
        if ($stats['size'] != $size) {
          unset($files[$file->uri]);
        }
      }
    }
  }
  usort($files, [
    $this,
    'compareFiles',
  ]);
  return $files;
}