compass/features/step_definitions/command_line_steps.rb
Chris Eppstein b07f303d9b Merge branch 'stable'
* stable: (36 commits)
  Tweak the changelog.
  [CSS3] The box-shadow $spread value now defaults to using the browser default instead of 0.
  update the lockfile
  some todos
  Move the contributing guide to the tutorials section.
  add on-page anchors to the command line reference page.
  Better docs on the grid image command.
  Move the tutorials to the main nav... I don't think most people see it.
  Don't set the display in the box-flex mixin. This makes nested flex boxes annoying. Closes GH-207
  Add a note about the colorization change.
  Add a note about the compass validator
  Only colorize the action when logging results.
  Update to use the new compass validator during development.
  Fix broken test cases.
  Support true in addition to the inset keyword for the box-shadow mixin. Closes GH-206
  IE8 compat for :last-child selector
  Make the compass configuration file more self documenting by adding comments for preferred_syntax, output_style, and line_comments.
  Pass --no-line-comments to disable line comments.
  A little less noise during installation.
  Change the default Sass directory in standalone projects from src to sass. Closes GH-203
  ...

Conflicts:
	TODO.md
	VERSION.yml
	doc-src/content/CHANGELOG.markdown
	features/command_line.feature
	features/step_definitions/command_line_steps.rb
	lib/compass/commands/write_configuration.rb
2010-11-11 21:45:07 -08:00

244 lines
7.0 KiB
Ruby

$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../test')))
require 'test_helper'
require 'compass/exec'
include Compass::CommandLineHelper
include Compass::IoHelper
include Compass::RailsHelper
Before do
Compass.reset_configuration!
@cleanup_directories = []
@original_working_directory = Dir.pwd
end
After do
Dir.chdir @original_working_directory
@cleanup_directories.each do |dir|
FileUtils.rm_rf dir
end
end
# Given Preconditions
Given %r{^I am using the existing project in ([^\s]+)$} do |project|
tmp_project = "tmp_#{File.basename(project)}"
@cleanup_directories << tmp_project
FileUtils.cp_r project, tmp_project
Dir.chdir tmp_project
end
Given %r{^I am in the parent directory$} do
Dir.chdir ".."
end
Given %r{^I'm in a newly created rails project: (.+)$} do |project_name|
@cleanup_directories << project_name
begin
generate_rails_app project_name
Dir.chdir project_name
rescue LoadError
pending "Missing Ruby-on-rails gems: sudo gem install rails"
end
end
Given /^I should clean up the directory: (\w+)$/ do |directory|
@cleanup_directories << directory
end
# When Actions are performed
When /^I create a project using: compass create ([^\s]+) ?(.+)?$/ do |dir, args|
@cleanup_directories << dir
compass 'create', dir, *(args || '').split
end
When /^I initialize a project using: compass init ?(.+)?$/ do |args|
compass 'init', *(args || '').split
end
When /^I run: compass ([^\s]+) ?(.+)?$/ do |command, args|
compass command, *(args || '').split
end
When /^I run in a separate process: compass ([^\s]+) ?(.+)?$/ do |command, args|
unless @other_process = fork
@last_result = ''
@last_error = ''
Signal.trap("HUP") do
open('/tmp/last_result.compass_test.txt', 'w') do |file|
file.puts $stdout.string
end
open('/tmp/last_error.compass_test.txt', 'w') do |file|
file.puts @stderr.string
end
exit!
end
# this command will run forever
# we kill it with a HUP signal from the parent process.
args = (args || '').split
args << { :wait => 5 }
compass command, *args
exit!
end
end
When /^I shutdown the other process$/ do
Process.kill("HUP", @other_process)
Process.wait
@last_result = File.read('/tmp/last_result.compass_test.txt')
@last_error = File.read('/tmp/last_error.compass_test.txt')
end
When /^I touch ([^\s]+)$/ do |filename|
FileUtils.touch filename
end
When /^I wait ([\d.]+) seconds?$/ do |count|
sleep count.to_f
end
When /^I add some sass to ([^\s]+)$/ do |filename|
open(filename, "w+") do |file|
file.puts ".added .some .arbitrary"
file.puts " sass: code"
end
end
# Then postconditions
Then /^a directory ([^ ]+) is (not )?created$/ do |directory, negated|
File.directory?(directory).should == !negated
end
Then /an? \w+ file ([^ ]+) is (not )?created/ do |filename, negated|
File.exists?(filename).should == !negated
end
Then /an? \w+ file ([^ ]+) is reported created/ do |filename|
@last_result.should =~ /create #{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is (?:reported )?compiled/ do |filename|
@last_result.should =~ /compile #{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is reported unchanged/ do |filename|
@last_result.should =~ /unchanged #{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is reported identical/ do |filename|
@last_result.should =~ /identical #{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is reported overwritten/ do |filename|
@last_result.should =~ /overwrite #{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is not mentioned/ do |filename|
@last_result.should_not =~ /#{Regexp.escape(filename)}/
end
Then /I am told how to link to ([^ ]+) for media "([^"]+)"/ do |stylesheet, media|
@last_result.should =~ %r{<link href="#{stylesheet}" media="#{media}" rel="stylesheet" type="text/css" />}
end
Then /I am told how to conditionally link "([^"]+)" to ([^ ]+) for media "([^"]+)"/ do |condition, stylesheet, media|
@last_result.should =~ %r{<!--\[if #{condition}\]>\s+<link href="#{stylesheet}" media="#{media}" rel="stylesheet" type="text/css" />\s+<!\[endif\]-->}mi
end
Then /^an error message is printed out: (.+)$/ do |error_message|
@last_error.should =~ Regexp.new(Regexp.escape(error_message))
end
Then /^the command exits with a non\-zero error code$/ do
@last_exit_code.should_not == 0
end
Then /^the command exits normally$/ do
@last_exit_code.should == 0
end
Then /^I am congratulated$/ do
@last_result.should =~ /Congratulations!/
end
Then /^I am told that I can place stylesheets in the ([^\s]+) subdirectory$/ do |subdir|
@last_result.should =~ /You may now add sass stylesheets to the #{subdir} subdirectory of your project./
end
Then /^I am told how to compile my sass stylesheets$/ do
@last_result.should =~ /You must compile your sass stylesheets into CSS when they change.\nThis can be done in one of the following ways:/
end
Then /^I should be shown a list of "([^"]+)" commands$/ do |kind|
@last_result.should =~ /^#{kind.capitalize} Commands:$/
@last_command_list = []
found = false
indent = nil
@last_result.split("\n").each do |line|
if line =~ /^#{kind.capitalize} Commands:$/
found = true
elsif found && line =~ /^\s+/
@last_command_list << line
elsif found && line =~ /^$|^\w/
break
end
end
end
Then /^the list of commands should describe the ([^ ]+) command$/ do |command|
@last_result.should =~ /^\s+\* #{command}\s+- [A-Z].+$/
end
Then /^the following configuration properties are set in ([^ ]+):$/ do |config_file, table|
config = Compass::Configuration::Data.new_from_file(config_file)
table.hashes.each do |hash|
config.send(hash['property']).should == hash['value']
end
end
Then /^my css is validated$/ do
if @last_error =~ /The Compass CSS Validator could not be loaded/
pending "Missing Dependency: sudo gem install chriseppstein-compass-validator"
else
@last_result.should =~ /Compass CSS Validator/
end
end
Then /^I am informed that my css is valid.$/ do
@last_result.should =~ /Your CSS files are valid\./
end
Then /^I am told statistics for each file:$/ do |table|
# table is a Cucumber::Ast::Table
table.raw.each do |row|
re = Regexp.new row.join(' *\| *')
@last_result.should =~ re
end
end
Then /^I should see the following "([^"]+)" commands:$/ do |kind, table|
Then %Q{I should be shown a list of "#{kind}" commands}
commands = @last_command_list.map{|c| c =~ /^\s+\* ([^ ]+)\s+- [A-Z].+$/; [$1]}
table.diff!(commands)
end
Then /^the image ([^ ]+) has a size of (\d+)x(\d+)$/ do |file, width, height|
# see http://snippets.dzone.com/posts/show/805
IO.read(file)[0x10..0x18].unpack('NN').should == [width.to_i, height.to_i]
end
Then /^I should see the following lines of output:$/ do |table|
table.diff!([['blueprint'],['compass']])
end
Then /^I should see the following output: (.+)$/ do |expected|
(@last_result.strip + @last_error.strip).should == expected.gsub(/\$PROJECT_PATH/,Dir.pwd).strip
end