You are here

public function FileUrlGeneratorTest::urlProvider in CDN 8.3

File

tests/src/Unit/File/FileUrlGeneratorTest.php, line 84

Class

FileUrlGeneratorTest
@coversDefaultClass \Drupal\cdn\File\FileUrlGenerator @group cdn

Namespace

Drupal\Tests\cdn\Unit\File

Code

public function urlProvider() {
  $cases_root = [
    'absolute URL' => [
      'http://example.com/llama.jpg',
      FALSE,
    ],
    'scheme-relative URL' => [
      '//example.com/llama.jpg',
      FALSE,
    ],
    'shipped file (fallback)' => [
      'core/misc/something.else',
      '//cdn.example.com/core/misc/something.else',
    ],
    'shipped file (simple)' => [
      'core/misc/simple.css',
      '//static.example.com/core/misc/simple.css',
    ],
    'shipped file (auto-balanced)' => [
      'core/misc/auto-balanced.png',
      '//img2.example.com/core/misc/auto-balanced.png',
    ],
    'shipped file with querystring (e.g. in url() in CSS)' => [
      'core/misc/something.else?foo=bar&baz=qux',
      '//cdn.example.com/core/misc/something.else?foo=bar&baz=qux',
    ],
    'shipped file with fragment (e.g. in url() in CSS)' => [
      'core/misc/something.else#llama',
      '//cdn.example.com/core/misc/something.else#llama',
    ],
    'shipped file with querystring & fragment (e.g. in url() in CSS)' => [
      'core/misc/something.else?foo=bar&baz=qux#llama',
      '//cdn.example.com/core/misc/something.else?foo=bar&baz=qux#llama',
    ],
    'managed public file (fallback)' => [
      'public://something.else',
      '//cdn.example.com/sites/default/files/something.else',
    ],
    'managed public file (spublic public imple)' => [
      'public://simple.css',
      '//static.example.com/sites/default/files/simple.css',
    ],
    'managed public file (auto-balanced)' => [
      'public://auto-balanced.png',
      '//img2.example.com/sites/default/files/auto-balanced.png',
    ],
    'managed private file (fallback)' => [
      'private://something.else',
      FALSE,
    ],
    'unicode' => [
      'public://újjáépítésérol — 100% in B&W.jpg',
      '//img1.example.com/sites/default/files/%C3%BAjj%C3%A1%C3%A9p%C3%ADt%C3%A9s%C3%A9rol%20%E2%80%94%20100%25%20in%20B%26W.jpg',
    ],
    'encoded' => [
      'public://llama%20.jpg',
      '//img2.example.com/sites/default/files/llama%2520.jpg',
    ],
    'reserved characters in RFC3986' => [
      'public://gendelims :?#[]@ subdelims !$&\'()*+,;=.something',
      '//cdn.example.com/sites/default/files/gendelims%20%3A%3F%23%5B%5D%40%20subdelims%20%21%24%26%27%28%29%2A%2B%2C%3B%3D.something',
    ],
  ];
  $cases_subdir = [
    'absolute URL' => [
      'http://example.com/llama.jpg',
      FALSE,
    ],
    'scheme-relative URL' => [
      '//example.com/llama.jpg',
      FALSE,
    ],
    'shipped file (fallback)' => [
      'core/misc/feed.svg',
      '//cdn.example.com/subdir/core/misc/feed.svg',
    ],
    'shipped file (simple)' => [
      'core/misc/simple.css',
      '//static.example.com/subdir/core/misc/simple.css',
    ],
    'shipped file (auto-balanced)' => [
      'core/misc/auto-balanced.png',
      '//img2.example.com/subdir/core/misc/auto-balanced.png',
    ],
    'shipped file with querystring (e.g. in url() in CSS)' => [
      'core/misc/something.else?foo=bar&baz=qux',
      '//cdn.example.com/subdir/core/misc/something.else?foo=bar&baz=qux',
    ],
    'shipped file with fragment (e.g. in url() in CSS)' => [
      'core/misc/something.else#llama',
      '//cdn.example.com/subdir/core/misc/something.else#llama',
    ],
    'shipped file with querystring & fragment (e.g. in url() in CSS)' => [
      'core/misc/something.else?foo=bar&baz=qux#llama',
      '//cdn.example.com/subdir/core/misc/something.else?foo=bar&baz=qux#llama',
    ],
    'managed public file (fallback)' => [
      'public://something.else',
      '//cdn.example.com/subdir/sites/default/files/something.else',
    ],
    'managed public file (simple)' => [
      'public://simple.css',
      '//static.example.com/subdir/sites/default/files/simple.css',
    ],
    'managed public file (auto-balanced)' => [
      'public://auto-balanced.png',
      '//img2.example.com/subdir/sites/default/files/auto-balanced.png',
    ],
    'managed private file (fallback)' => [
      'private://something.else',
      FALSE,
    ],
    'unicode' => [
      'public://újjáépítésérol — 100% in B&W.jpg',
      '//img1.example.com/subdir/sites/default/files/%C3%BAjj%C3%A1%C3%A9p%C3%ADt%C3%A9s%C3%A9rol%20%E2%80%94%20100%25%20in%20B%26W.jpg',
    ],
    'encoded' => [
      'public://llama%20.jpg',
      '//img2.example.com/subdir/sites/default/files/llama%2520.jpg',
    ],
    'reserved characters in RFC3986' => [
      'public://gendelims :?#[]@ subdelims !$&\'()*+,;=.something',
      '//cdn.example.com/subdir/sites/default/files/gendelims%20%3A%3F%23%5B%5D%40%20subdelims%20%21%24%26%27%28%29%2A%2B%2C%3B%3D.something',
    ],
  ];
  $cases = [];
  assert(count($cases_root) === count($cases_subdir));
  foreach ($cases_root as $description => $case) {
    $cases['root, ' . $description] = array_merge([
      '',
    ], $case);
  }
  foreach ($cases_subdir as $description => $case) {
    $cases['subdir, ' . $description] = array_merge([
      '/subdir',
    ], $case);
  }

  // Generate `https://`, `http://` and `//` permutations for each case.
  $cases_with_scheme = [];
  foreach ($cases as $description => $case) {
    foreach ([
      'https://',
      'http://',
      '//',
    ] as $scheme) {
      list($base_path, $uri, $expected_result) = $case;
      $cases_with_scheme['scheme=' . $scheme . ', ' . $description] = [
        $scheme,
        $base_path,
        $uri,
        !is_string($expected_result) ? $expected_result : $scheme . substr($expected_result, 2),
      ];
    }
  }
  return $cases_with_scheme;
}