From 897ad664e4fcc489c79b9072ba6d29cf6ec79c7d Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Tue, 27 Mar 2012 12:20:28 +1300 Subject: [PATCH 1/2] MDL-32081 csslib: Added unit tests for complex background images --- lib/simpletest/testcsslib.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/simpletest/testcsslib.php b/lib/simpletest/testcsslib.php index abe3e1b3552..cea549a57fb 100644 --- a/lib/simpletest/testcsslib.php +++ b/lib/simpletest/testcsslib.php @@ -112,6 +112,18 @@ class css_optimiser_test extends UnitTestCase { .block_tree .collapsed .tree_item.branch {background-image: url([[pix:t/collapsed]]);}'; $cssout = '.block_tree .tree_item.emptybranch{background:url([[pix:t/collapsed_empty]]) no-repeat 0% 5%;} .block_tree .collapsed .tree_item.branch{background-image:url([[pix:t/collapsed]]);}'; $this->assertEqual($cssout, $optimiser->process($cssin)); + + $cssin = '#nextLink{background:url(data:image/gif;base64,AAAA);}'; + $cssout = '#nextLink{background-image:url(data:image/gif;base64,AAAA);}'; + $this->assertEqual($cssout, $optimiser->process($cssin)); + + $cssin = '#nextLink{background-image:url(data:image/gif;base64,AAAA);}'; + $cssout = '#nextLink{background-image:url(data:image/gif;base64,AAAA);}'; + $this->assertEqual($cssout, $optimiser->process($cssin)); + + $cssin = '.test {background: #123456 url(data:image/gif;base64,AAAA) no-repeat top left;}'; + $cssout = '.test{background:#123456 url(data:image/gif;base64,AAAA) no-repeat top left;}'; + $this->assertEqual($cssout, $optimiser->process($cssin)); } /** @@ -501,8 +513,8 @@ class css_optimiser_test extends UnitTestCase { $this->assertEqual($cssout, $optimiser->process($cssin)); // Test complex CSS rules that don't really exist but mimic other CSS rules - $cssin = '.one {master-of-destruction: explode(\' \', "What madness";}'; - $cssout = '.one{master-of-destruction:explode(\' \', "What madness";}'; + $cssin = '.one {master-of-destruction: explode(\' \', "What madness");}'; + $cssout = '.one{master-of-destruction:explode(\' \', "What madness");}'; $this->assertEqual($cssout, $optimiser->process($cssin)); // Test some complex IE css... I couldn't even think of a more complext solution From 50e49c917de395687530318eb09f8dc3560a7bd7 Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Tue, 27 Mar 2012 12:34:31 +1300 Subject: [PATCH 2/2] MDL-32081 csslib: Improved handling of parentheses when processing styles --- lib/csslib.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/csslib.php b/lib/csslib.php index 03d728c289c..5fc0f9b16ab 100644 --- a/lib/csslib.php +++ b/lib/csslib.php @@ -638,6 +638,13 @@ class css_optimiser { } switch ($char) { case ';': + if ($inparenthesis) { + $buffer .= $char; + // continue 1: The switch processing chars + // continue 2: The switch processing the state + // continue 3: The for loop + continue 3; + } $currentrule->add_style($buffer); $buffer = ''; $inquotes = false; @@ -656,6 +663,21 @@ class css_optimiser { $this->rawrules++; $buffer = ''; $inquotes = false; + $inparenthesis = false; + // continue 1: The switch processing chars + // continue 2: The switch processing the state + // continue 3: The for loop + continue 3; + case '(': + $inparenthesis = true; + $buffer .= $char; + // continue 1: The switch processing chars + // continue 2: The switch processing the state + // continue 3: The for loop + continue 3; + case ')': + $inparenthesis = false; + $buffer .= $char; // continue 1: The switch processing chars // continue 2: The switch processing the state // continue 3: The for loop