haml--haml/test/sass/plugin_test.rb

160 lines
4.1 KiB
Ruby

#!/usr/bin/env ruby
MERB_ENV = RAILS_ENV = 'testing'
RAILS_ROOT = '.'
require 'test/unit'
require 'fileutils'
require File.dirname(__FILE__) + '/../../lib/sass'
require 'rubygems'
require 'action_controller'
require 'sass/plugin'
class SassPluginTest < Test::Unit::TestCase
@@templates = %w{
complex constants parent_ref import alt
subdir/subdir subdir/nested_subdir/nested_subdir
}
def setup
FileUtils.mkdir File.dirname(__FILE__) + '/tmp'
set_plugin_opts
Sass::Plugin.update_stylesheets
end
def teardown
FileUtils.rm_r File.dirname(__FILE__) + '/tmp'
end
def test_templates_should_render_correctly
@@templates.each { |name| assert_renders_correctly(name) }
end
def test_no_update
File.delete(tempfile_loc('basic'))
assert Sass::Plugin.stylesheet_needs_update?('basic')
Sass::Plugin.update_stylesheets
assert !Sass::Plugin.stylesheet_needs_update?('basic')
end
def test_update_needed_when_modified
sleep(1)
FileUtils.touch(template_loc('basic'))
assert Sass::Plugin.stylesheet_needs_update?('basic')
Sass::Plugin.update_stylesheets
assert !Sass::Plugin.stylesheet_needs_update?('basic')
end
def test_update_needed_when_dependency_modified
sleep(1)
FileUtils.touch(template_loc('basic'))
assert Sass::Plugin.stylesheet_needs_update?('import')
Sass::Plugin.update_stylesheets
assert !Sass::Plugin.stylesheet_needs_update?('import')
end
def test_full_exception_handling
File.delete(tempfile_loc('bork'))
Sass::Plugin.update_stylesheets
File.open(tempfile_loc('bork')) do |file|
assert_equal("/*\nSass::SyntaxError: Undefined constant: \"!bork\".\non line 2 of #{File.dirname(__FILE__) + '/templates/bork.sass'}\n\n1: bork\n2: :bork= !bork", file.read.split("\n")[0...6].join("\n"))
end
File.delete(tempfile_loc('bork'))
end
def test_nonfull_exception_handling
Sass::Plugin.options[:full_exception] = false
File.delete(tempfile_loc('bork'))
Sass::Plugin.update_stylesheets
assert_equal("/* Internal stylesheet error */", File.read(tempfile_loc('bork')))
File.delete(tempfile_loc('bork'))
Sass::Plugin.options[:full_exception] = true
end
def test_rails_update
File.delete(tempfile_loc('basic'))
assert Sass::Plugin.stylesheet_needs_update?('basic')
ActionController::Base.new.process
assert !Sass::Plugin.stylesheet_needs_update?('basic')
end
def test_merb_update
begin
require 'merb'
rescue LoadError
puts "\nmerb couldn't be loaded, skipping a test"
return
end
require 'sass/plugin/merb'
MerbHandler.send(:define_method, :process_without_sass) { |*args| }
set_plugin_opts
File.delete(tempfile_loc('basic'))
assert Sass::Plugin.stylesheet_needs_update?('basic')
MerbHandler.new('.').process nil, nil
assert !Sass::Plugin.stylesheet_needs_update?('basic')
end
def test_doesnt_render_partials
assert !File.exists?(tempfile_loc('_partial'))
end
private
def assert_renders_correctly(name)
File.read(result_loc(name)).split("\n").zip(File.read(tempfile_loc(name)).split("\n")).each_with_index do |pair, line|
message = "template: #{name}\nline: #{line + 1}"
assert_equal(pair.first, pair.last, message)
end
end
def template_loc(name)
File.dirname(__FILE__) + "/templates/#{name}.sass"
end
def tempfile_loc(name)
File.dirname(__FILE__) + "/tmp/#{name}.css"
end
def result_loc(name)
File.dirname(__FILE__) + "/results/#{name}.css"
end
def set_plugin_opts
Sass::Plugin.options = {
:template_location => File.dirname(__FILE__) + '/templates',
:css_location => File.dirname(__FILE__) + '/tmp',
:style => :compact,
:load_paths => [File.dirname(__FILE__) + '/results'],
:always_update => true,
}
end
end
module Sass::Plugin
class << self
public :stylesheet_needs_update?
end
end
class Sass::Engine
alias_method :old_render, :render
def render
raise "bork bork bork!" if @template[0] == "{bork now!}"
old_render
end
end
class ActionController::Base
def sass_old_process(*args); end
end