diff --git a/lib/juicer/dependency_resolver/css_dependency_resolver.rb b/lib/juicer/dependency_resolver/css_dependency_resolver.rb index 985fd1c..faddad2 100644 --- a/lib/juicer/dependency_resolver/css_dependency_resolver.rb +++ b/lib/juicer/dependency_resolver/css_dependency_resolver.rb @@ -12,7 +12,7 @@ class CssDependencyResolver < DependencyResolver private def parse(line, imported_file = nil) - return $2 if line =~ @@import_pattern + return $2 if encoded_line(line) =~ @@import_pattern # At first sight of actual CSS rules we abort (TODO: This does not take # into account the fact that rules may be commented out and that more diff --git a/lib/juicer/dependency_resolver/dependency_resolver.rb b/lib/juicer/dependency_resolver/dependency_resolver.rb index 6cc55d3..7e5dfbf 100644 --- a/lib/juicer/dependency_resolver/dependency_resolver.rb +++ b/lib/juicer/dependency_resolver/dependency_resolver.rb @@ -58,6 +58,14 @@ def extension raise NotImplementedError.new end + def encoded_line(line) + if String.method_defined?(:encode) + line.encode!('UTF-8', 'UTF-8', :invalid => :replace) + else + line + end + end + # # Carries out the actual work of resolve. resolve resets the internal # file list and yields control to _resolve for rebuilding the file list. diff --git a/lib/juicer/dependency_resolver/javascript_dependency_resolver.rb b/lib/juicer/dependency_resolver/javascript_dependency_resolver.rb index 21c2e1e..5fbb9b4 100644 --- a/lib/juicer/dependency_resolver/javascript_dependency_resolver.rb +++ b/lib/juicer/dependency_resolver/javascript_dependency_resolver.rb @@ -9,7 +9,7 @@ class JavaScriptDependencyResolver < DependencyResolver private def parse(line, imported_file = nil) - return $1 if line =~ @@depends_pattern + return $1 if encoded_line(line) =~ @@depends_pattern # If we have already skimmed through some @depend/@depends or a # closing comment we're done. diff --git a/test/unit/juicer/dependency_resolver/css_dependency_resolver_test.rb b/test/unit/juicer/dependency_resolver/css_dependency_resolver_test.rb index 7ecdd9c..9fef12c 100644 --- a/test/unit/juicer/dependency_resolver/css_dependency_resolver_test.rb +++ b/test/unit/juicer/dependency_resolver/css_dependency_resolver_test.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 require "test_helper" class TestCssDependencyResolver < Test::Unit::TestCase @@ -33,4 +34,12 @@ def test_load_order files = @resolver.resolve(path("a1.css")).collect { |file| file.split("/").pop } assert_equal "d1.cssb1.cssc1.cssa1.css", files.join end + + def test_parse + text = "© Dynamic Drive" + text.force_encoding("us-ascii") if RUBY_VERSION > "1.9" + assert_nothing_raised ArgumentError do + @resolver.send(:parse, text) + end + end end diff --git a/test/unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb b/test/unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb index 88e92d6..19d2b1c 100644 --- a/test/unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb +++ b/test/unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 require "test_helper" class TestJavaScriptDependencyResolver < Test::Unit::TestCase @@ -47,4 +48,12 @@ def test_directory_resolve actual_files = @resolver.resolve(my_app) assert_equal expected_files, actual_files end + + def test_parse + text = "© Dynamic Drive" + text.force_encoding("us-ascii") if RUBY_VERSION > "1.9" + assert_nothing_raised ArgumentError do + @resolver.send(:parse, text) + end + end end