From 429314d2b0da220065e5d888d501ad9d0f0e9e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Sat, 30 Aug 2008 02:40:59 +0200 Subject: [PATCH] avoid some warnings thrown by the Ruby interpreter --- bin/haml | 3 +- lib/haml/engine.rb | 3 +- lib/haml/exec.rb | 1 - lib/haml/filters.rb | 1 + lib/haml/helpers.rb | 2 +- lib/haml/precompiler.rb | 2 ++ lib/sass/constant/number.rb | 2 +- test/haml/engine_test.rb | 59 +++++++++++++++++++++---------------- test/haml/html2haml_test.rb | 3 +- test/sass/plugin_test.rb | 1 + test/test_helper.rb | 6 ++-- 11 files changed, 49 insertions(+), 34 deletions(-) diff --git a/bin/haml b/bin/haml index 3480fb9b..1a24e4e4 100755 --- a/bin/haml +++ b/bin/haml @@ -1,7 +1,8 @@ #!/usr/bin/env ruby # The command line Haml parser. -require File.dirname(__FILE__) + '/../lib/haml' +$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib' +require 'haml' require 'haml/exec' opts = Haml::Exec::Haml.new(ARGV) diff --git a/lib/haml/engine.rb b/lib/haml/engine.rb index d167c528..abda15a2 100644 --- a/lib/haml/engine.rb +++ b/lib/haml/engine.rb @@ -68,6 +68,7 @@ module Haml :escape_html => false } @options.merge! options + @index = 0 unless [:xhtml, :html4, :html5].include?(@options[:format]) raise Haml::Error, "Invalid format #{@options[:format].inspect}" @@ -77,8 +78,8 @@ module Haml @to_close_stack = [] @output_tabs = 0 @template_tabs = 0 - @index = 0 @flat_spaces = -1 + @flat = false @newlines = 0 @precompiled = '' @merged_text = '' diff --git a/lib/haml/exec.rb b/lib/haml/exec.rb index 42df9cc7..ed530f94 100644 --- a/lib/haml/exec.rb +++ b/lib/haml/exec.rb @@ -1,4 +1,3 @@ -require File.dirname(__FILE__) + '/../haml' require 'optparse' require 'fileutils' diff --git a/lib/haml/filters.rb b/lib/haml/filters.rb index 914dac92..85f6d1ce 100644 --- a/lib/haml/filters.rb +++ b/lib/haml/filters.rb @@ -32,6 +32,7 @@ module Haml def self.included(base) # :nodoc: Filters.defined[base.name.split("::").last.downcase] = base base.extend(base) + base.instance_variable_set "@lazy_requires", nil end # Takes a string, the source text that should be passed to the filter, diff --git a/lib/haml/helpers.rb b/lib/haml/helpers.rb index 190f3f62..40ca9525 100644 --- a/lib/haml/helpers.rb +++ b/lib/haml/helpers.rb @@ -397,7 +397,7 @@ module Haml def capture_haml_with_buffer(local_buffer, *args, &block) position = local_buffer.length - block.call *args + block.call(*args) captured = local_buffer.slice!(position..-1) diff --git a/lib/haml/precompiler.rb b/lib/haml/precompiler.rb index 7a9bde0e..f68bdf7c 100644 --- a/lib/haml/precompiler.rb +++ b/lib/haml/precompiler.rb @@ -112,6 +112,8 @@ END Line = Struct.new(:text, :unstripped, :index, :spaces, :tabs) def precompile + @haml_comment = @dont_indent_next_line = @dont_tab_up_next_text = false + @indentation = nil old_line = Line.new @template.split(/\r\n|\r|\n/).each_with_index do |text, index| @next_line = line = Line.new(text.strip, text.lstrip.chomp, index) diff --git a/lib/sass/constant/number.rb b/lib/sass/constant/number.rb index f053f289..56b67f74 100644 --- a/lib/sass/constant/number.rb +++ b/lib/sass/constant/number.rb @@ -8,7 +8,7 @@ module Sass::Constant # :nodoc: def parse(value) first, second, unit = value.scan(Literal::NUMBER)[0] @value = first.empty? ? second.to_i : "#{first}#{second}".to_f - @unit = unit unless unit.empty? + @unit = unit.empty? ? nil : unit end def plus(other) diff --git a/test/haml/engine_test.rb b/test/haml/engine_test.rb index 90ed1400..e3e104f0 100644 --- a/test/haml/engine_test.rb +++ b/test/haml/engine_test.rb @@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../test_helper' class EngineTest < Test::Unit::TestCase - # A map of erroneous Sass documents to the error messages they should produce. + # A map of erroneous Haml documents to the error messages they should produce. # The error messages may be arrays; # if so, the second element should be the line number that should be reported for the error. # If this isn't provided, the tests will assume the line number should be the last line of the document. @@ -34,13 +34,7 @@ END "%a/ b" => "Self-closing tags can't have content.", " %p foo" => "Indenting at the beginning of the document is illegal.", " %p foo" => "Indenting at the beginning of the document is illegal.", - "- end" => < "You don't need to use \"- end\" in Haml. Use indentation instead:\n- if foo?\n %strong Foo!\n- else\n Not foo.", " \n\t\n %p foo" => ["Indenting at the beginning of the document is illegal.", 3], # Regression tests @@ -64,9 +58,19 @@ END def render(text, options = {}, &block) scope = options.delete(:scope) || Object.new locals = options.delete(:locals) || {} - Haml::Engine.new(text, options).to_html(scope, locals, &block) + engine(text, options).to_html(scope, locals, &block) end - + + def engine(text, options = {}) + unless options[:filename] + # use caller method name as fake filename. useful for debugging + i = -1 + caller[i+=1] =~ /`(.+?)'/ until $1 and $1.index('test_') == 0 + options[:filename] = "(#{$1})" + end + Haml::Engine.new(text, options) + end + def test_empty_render_should_remain_empty assert_equal('', render('')) end @@ -99,7 +103,7 @@ END end def test_multi_render - engine = Haml::Engine.new("%strong Hi there!") + engine = engine("%strong Hi there!") assert_equal("Hi there!\n", engine.to_html) assert_equal("Hi there!\n", engine.to_html) assert_equal("Hi there!\n", engine.to_html) @@ -270,14 +274,14 @@ SOURCE render("\n\n = abc", :filename => 'test', :line => 2) rescue Exception => e assert_kind_of Haml::SyntaxError, e - assert_match /test:4/, e.backtrace.first + assert_match(/test:4/, e.backtrace.first) end begin render("\n\n= 123\n\n= nil[]", :filename => 'test', :line => 2) rescue Exception => e assert_kind_of NoMethodError, e - assert_match /test:6/, e.backtrace.first + assert_match(/test:6/, e.backtrace.first) end end @@ -364,12 +368,15 @@ SOURCE def test_exceptions EXCEPTION_MAP.each do |key, value| begin - render(key) + render(key, :filename => "(exception test for #{key.inspect})") rescue Exception => err value = [value] unless value.is_a?(Array) + expected_message, line_no = value + line_no ||= key.split("\n").length + line_reported = err.backtrace[0].gsub(/\(.+\):/, '').to_i - assert_equal(value.first, err.message, "Line: #{key}") - assert_equal(value[1] || key.split("\n").length, err.backtrace[0].gsub('(haml):', '').to_i, "Line: #{key}") + assert_equal(expected_message, err.message, "Line: #{key}") + assert_equal(line_no, line_reported, "Line: #{key}") else assert(false, "Exception not raised for\n#{key}") end @@ -379,7 +386,7 @@ SOURCE def test_exception_line render("a\nb\n!!!\n c\nd") rescue Haml::SyntaxError => e - assert_equal("(haml):4", e.backtrace[0]) + assert_equal("(test_exception_line):4", e.backtrace[0]) else assert(false, '"a\nb\n!!!\n c\nd" doesn\'t produce an exception') end @@ -387,7 +394,7 @@ SOURCE def test_exception render("%p\n hi\n %a= undefined\n= 12") rescue Exception => e - assert_match("(haml):3", e.backtrace[0]) + assert_match("(test_exception):3", e.backtrace[0]) else # Test failed... should have raised an exception assert(false) @@ -396,7 +403,7 @@ SOURCE def test_compile_error render("a\nb\n- fee)\nc") rescue Exception => e - assert_match(/^compile error\n\(haml\):3: syntax error/i, e.message) + assert_match(/^compile error\n\(test_compile_error\):3: syntax error/i, e.message) else assert(false, '"a\nb\n- fee)\nc" doesn\'t produce an exception!') @@ -471,28 +478,28 @@ END def test_yield_should_work_with_def_method s = "foo" - Haml::Engine.new("= yield\n= upcase").def_method(s, :render) + engine("= yield\n= upcase").def_method(s, :render) assert_equal("12\nFOO\n", s.render { 12 }) end def test_def_method_with_module - Haml::Engine.new("= yield\n= upcase").def_method(String, :render_haml) + engine("= yield\n= upcase").def_method(String, :render_haml) assert_equal("12\nFOO\n", "foo".render_haml { 12 }) end def test_def_method_locals obj = Object.new - Haml::Engine.new("%p= foo\n.bar{:baz => baz}= boom").def_method(obj, :render, :foo, :baz, :boom) + engine("%p= foo\n.bar{:baz => baz}= boom").def_method(obj, :render, :foo, :baz, :boom) assert_equal("

1

\n
3
\n", obj.render(:foo => 1, :baz => 2, :boom => 3)) end def test_render_proc_locals - proc = Haml::Engine.new("%p= foo\n.bar{:baz => baz}= boom").render_proc(Object.new, :foo, :baz, :boom) + proc = engine("%p= foo\n.bar{:baz => baz}= boom").render_proc(Object.new, :foo, :baz, :boom) assert_equal("

1

\n
3
\n", proc[:foo => 1, :baz => 2, :boom => 3]) end def test_render_proc_with_binding - assert_equal("FOO\n", Haml::Engine.new("= upcase").render_proc("foo".instance_eval{binding}).call) + assert_equal("FOO\n", engine("= upcase").render_proc("foo".instance_eval{binding}).call) end def test_ugly_true @@ -519,7 +526,7 @@ END end def test_arbitrary_output_option - assert_raise(Haml::Error, "Invalid output format :html1") { Haml::Engine.new("%br", :format => :html1) } + assert_raise(Haml::Error, "Invalid output format :html1") { engine("%br", :format => :html1) } end # HTML 4.0 @@ -548,7 +555,7 @@ END # because anything before the doctype triggers quirks mode in IE def test_xml_prolog_and_doctype_dont_result_in_a_leading_whitespace_in_html - assert_no_match /^\s+/, render("!!! xml\n!!!", :format => :html4) + assert_no_match(/^\s+/, render("!!! xml\n!!!", :format => :html4)) end # HTML5 diff --git a/test/haml/html2haml_test.rb b/test/haml/html2haml_test.rb index 3746fde5..0132e12f 100644 --- a/test/haml/html2haml_test.rb +++ b/test/haml/html2haml_test.rb @@ -52,7 +52,8 @@ class Html2HamlTest < Test::Unit::TestCase end def assert_equal_attributes(expected, result) - assert_equal *[expected, result].map { |s| s.gsub!(/\{ (.+) \}/, ''); $1.split(', ').sort } + expected_attr, result_attr = [expected, result].map { |s| s.gsub!(/\{ (.+) \}/, ''); $1.split(', ').sort } + assert_equal expected_attr, result_attr assert_equal expected, result end end diff --git a/test/sass/plugin_test.rb b/test/sass/plugin_test.rb index f1a379e0..366f9a88 100644 --- a/test/sass/plugin_test.rb +++ b/test/sass/plugin_test.rb @@ -151,5 +151,6 @@ class Sass::Engine end class ActionController::Base + undef :sass_old_process def sass_old_process(*args); end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 94af86f0..77f8d3f8 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,3 +1,4 @@ +lib_dir = File.dirname(__FILE__) + '/../lib' # allows testing with edge Rails by creating a test/rails symlink linked_rails = File.dirname(__FILE__) + '/rails' @@ -12,5 +13,6 @@ require 'action_controller' require 'action_view' require 'test/unit' -require File.dirname(__FILE__) + '/../lib/haml' -require File.dirname(__FILE__) + '/../lib/sass' +$:.unshift lib_dir unless $:.include?(lib_dir) +require 'haml' +require 'sass'