diff --git a/cdn.fallback.inc b/cdn.fallback.inc
index 55aec64..46f3de5 100644
--- a/cdn.fallback.inc
+++ b/cdn.fallback.inc
@@ -26,11 +26,11 @@ function cdn_html_alter_image_urls(&$html) {
$pattern .= "([\"|'][^>]*)>"; // End of opening tag.
$pattern .= "((]*\s+)src\s*=\s*[\"|'])([^\"|^']*)([\"|'])"; // Wrapped tag.
$pattern .= ")#i";
- _cdn_html_alter_file_url($html, $pattern, 0, 4, 5, 1, 7, 11);
+ _cdn_html_alter_file_url($html, $pattern, 0, 4, 6, 1, 7, 11);
// Image file URLs in tags.
$pattern = "#((]*\s+)src\s*=\s*[\"|'])($url_prefix_regex)([^\"|^'|^\?]*)()(\?[^\"|^']*)?([\"|'])#i";
- _cdn_html_alter_file_url($html, $pattern, 0, 4, 5, 1, 7);
+ _cdn_html_alter_file_url($html, $pattern, 0, 4, 6, 1, 7);
}
/**
diff --git a/cdn.test b/cdn.test
index 02eb3d1..2f39061 100644
--- a/cdn.test
+++ b/cdn.test
@@ -25,7 +25,10 @@ class CDNTestCase extends DrupalUnitTestCase {
$module_list = module_list();
$module_list['cdn']['filename'] = $cdn_module_file;
module_list(TRUE, FALSE, FALSE, $module_list);
+ $implementations = &drupal_static('module_implements');
+ $implementations = array();
+ $this->loadFile('cdn.constants.inc');
$this->loadFile('cdn.module');
// Override $conf to be able to use variable_set() and variable_get() in
@@ -445,3 +448,73 @@ class CDNOriginPullFarFutureTestCase extends CDNTestCase {
$this->assertIdentical($uri, $expected, 'cdn_file_url_alter() works correctly.');
}
}
+
+class CDNImageTestCase extends CDNTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Image HTML altering',
+ 'description' => 'Verify that image URLs inside HTML are rewritten correctly.',
+ 'group' => 'CDN',
+ );
+ }
+
+ function setUp() {
+ parent::setUp();
+ $this->loadFile('cdn.fallback.inc');
+ }
+
+ function testImage() {
+ $this->variableSet(CDN_BASIC_MAPPING_VARIABLE, 'http://cdn-a.com');
+ $this->variableSet(CDN_MODE_VARIABLE, CDN_MODE_BASIC);
+
+
+ // Simplest case possible for "".
+ $image_path = base_path() . 'foo/bar/image.png';
+ $template = function($url) {
+ return '';
+ };
+ $html = $template($image_path);
+ cdn_html_alter_image_urls($html);
+ $expected = 'http://cdn-a.com' . $image_path;
+ $this->assertIdentical($template($expected), $html, 'Image HTML correctly altered.');
+
+ // Query strings should be stripped
+ $html = $template($image_path . '?foobar');
+ cdn_html_alter_image_urls($html);
+ $this->assertIdentical($template($expected), $html, 'Image HTML correctly altered (query string stripped).');
+
+ // Edge case: a script generating an image is not (yet) supported.
+ $generated_image_path = base_path() . 'showimage?formula=12345.png';
+ $html = $template($generated_image_path);
+ cdn_html_alter_image_urls($html);
+ $expected = 'http://cdn-a.com' . base_path() . 'showimage';
+ // NOTE: this is what is being requested at http://drupal.org/node/1864536.
+ //$expected = 'http://cdn-a.com' . base_path() . 'showimage?formula=12345.png';
+ $this->assertIdentical($template($expected), $html, 'Image HTML correctly altered (query string stripped).');
+
+ // Simplest case possible for "".
+ $image_base_path = base_path() . 'foo/bar/image';
+ $template = function($a_url, $img_url) {
+ return '';
+ };
+ $html = $template($image_base_path . '.png', $image_base_path . '-thumbnail.png');
+ cdn_html_alter_image_urls($html);
+ $expected_a_url = 'http://cdn-a.com' . $image_base_path . '.png';
+ $expected_img_url = 'http://cdn-a.com' . $image_base_path . '-thumbnail.png';
+ $this->assertIdentical($template($expected_a_url, $expected_img_url), $html, 'Linked image HTML correctly altered.');
+
+ // Ensure that images linking to content (i.e. not a bigger version of the
+ // image) don't get their anchors modified
+ $link_url = base_path() . 'node';
+ $html = $template($link_url, $image_base_path . '-thumbnail.png');
+ cdn_html_alter_image_urls($html);
+ $expected_img_url = 'http://cdn-a.com' . $image_base_path . '-thumbnail.png';
+ $this->assertIdentical($template($link_url, $expected_img_url), $html, 'Linked image HTML correctly altered (anchor unmodified).');
+
+ // Same, but now for an anchor with a query string.
+ $link_url = base_path() . 'node?foobar';
+ $html = $template($link_url, $image_base_path . '-thumbnail.png');
+ cdn_html_alter_image_urls($html);
+ $this->assertIdentical($template($link_url, $expected_img_url), $html, 'Linked image HTML correctly altered (anchor unmodified, even with query strings).');
+ }
+}