Add regression tests to Cucumber.

This commit is contained in:
Jordon Bedwell 2015-10-29 17:19:03 -05:00
parent 0f4aed9ccf
commit 1c4b4ae271
3 changed files with 36 additions and 2 deletions

View File

@ -5,6 +5,13 @@ Feature: Rendering
But I want to make it as simply as possible
So render with Liquid and place in Layouts
Scenario: When receiving bad Liquid
Given I have a "index.html" page with layout "simple" that contains "{% include invalid.html %}"
And I have a simple layout that contains "{{ content }}"
When I run jekyll build
Then I should get a non-zero exit-status
And I should see "Liquid Exception" in the build output
Scenario: Render Liquid and place in layout
Given I have a "index.html" page with layout "simple" that contains "Hi there, Jekyll {{ jekyll.environment }}!"
And I have a simple layout that contains "{{ content }}Ahoy, indeed!"

View File

@ -24,6 +24,7 @@ end
After do
FileUtils.rm_rf(TEST_DIR) if File.exist?(TEST_DIR)
FileUtils.rm(JEKYLL_COMMAND_OUTPUT_FILE) if File.exist?(JEKYLL_COMMAND_OUTPUT_FILE)
FileUtils.rm(JEKYLL_COMMAND_STATUS_FILE) if File.exist?(JEKYLL_COMMAND_STATUS_FILE)
Dir.chdir(File.dirname(TEST_DIR))
end
@ -227,3 +228,7 @@ end
Then /^I should see "(.*)" in the build output$/ do |text|
assert_match Regexp.new(text), jekyll_run_output
end
Then /^I should get a non-zero exit(?:\-| )status$/ do
assert jekyll_run_status > 0
end

View File

@ -16,6 +16,7 @@ JEKYLL_SOURCE_DIR = File.dirname(File.dirname(File.dirname(__FILE__)))
TEST_DIR = File.expand_path(File.join('..', '..', 'tmp', 'jekyll'), File.dirname(__FILE__))
JEKYLL_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'jekyll'))
JEKYLL_COMMAND_OUTPUT_FILE = File.join(File.dirname(TEST_DIR), 'jekyll_output.txt')
JEKYLL_COMMAND_STATUS_FILE = File.join(File.dirname(TEST_DIR), 'jekyll_status.txt')
def source_dir(*files)
File.join(TEST_DIR, *files)
@ -36,12 +37,20 @@ def jekyll_output_file
JEKYLL_COMMAND_OUTPUT_FILE
end
def jekyll_status_file
JEKYLL_COMMAND_STATUS_FILE
end
def jekyll_run_output
File.read(jekyll_output_file) if File.file?(jekyll_output_file)
end
def jekyll_run_status
(File.read(jekyll_status_file) rescue 0).to_i
end
def run_bundle(args)
child = run_in_shell('bundle', *args.strip.split(' '))
run_in_shell('bundle', *args.strip.split(' '))
end
def run_jekyll(args)
@ -49,8 +58,21 @@ def run_jekyll(args)
child.status.exitstatus == 0
end
# -----------------------------------------------------------------------------
# XXX: POSIX::Spawn::Child does not write output when the exit status is > 0
# for example when doing [:out, :err] => [file, "w"] it will skip
# writing the file entirely, we sould switch to Open.
# -----------------------------------------------------------------------------
def run_in_shell(*args)
POSIX::Spawn::Child.new *args, :out => [JEKYLL_COMMAND_OUTPUT_FILE, "w"]
spawned = POSIX::Spawn::Child.new(*args)
status = spawned.status.exitstatus
File.write(JEKYLL_COMMAND_STATUS_FILE, status)
File.open(JEKYLL_COMMAND_OUTPUT_FILE, "w+") do |file|
status == 0 ? file.write(spawned.out) : file.write(spawned.err)
end
spawned
end
def slug(title)