Permalink
Browse files

Making "save and open page" file output path configurable to optional…

…ly avoid loads of capybara-*.html files in project root.
  • Loading branch information...
1 parent a94f994 commit af1df52c1db186ad8aaff19d72beca4095e228b8 @grimen committed Jun 27, 2010
Showing with 64 additions and 19 deletions.
  1. +2 −1 .gitignore
  2. +5 −4 lib/capybara.rb
  3. +4 −1 lib/capybara/save_and_open_page.rb
  4. +53 −13 spec/save_and_open_page_spec.rb
View
@@ -1,6 +1,7 @@
.idea/
.DS_Store
pkg
+tmp
*~
spec.opts
-
+capybara-*.html
View
@@ -11,15 +11,16 @@ class NotSupportedByDriverError < CapybaraError; end
class TimeoutError < CapybaraError; end
class LocateHiddenElementError < CapybaraError; end
class InfiniteRedirectError < TimeoutError; end
-
+
class << self
attr_accessor :debug, :asset_root, :app_host, :run_server, :default_host
attr_accessor :default_selector, :default_wait_time, :ignore_hidden_elements
+ attr_accessor :save_and_open_page_path
def default_selector
@default_selector ||= :xpath
end
-
+
def default_wait_time
@default_wait_time ||= 2
end
@@ -29,14 +30,14 @@ def log(message)
true
end
end
-
+
autoload :Server, 'capybara/server'
autoload :Session, 'capybara/session'
autoload :Node, 'capybara/node'
autoload :XPath, 'capybara/xpath'
autoload :Searchable, 'capybara/searchable'
autoload :VERSION, 'capybara/version'
-
+
module Driver
autoload :Base, 'capybara/driver/base'
autoload :RackTest, 'capybara/driver/rack_test_driver'
@@ -3,8 +3,11 @@ module SaveAndOpenPage
extend(self)
def save_and_open_page(html)
- name="capybara-#{Time.new.strftime("%Y%m%d%H%M%S")}.html"
+ name = File.join(*[Capybara.save_and_open_page_path, "capybara-#{Time.new.strftime("%Y%m%d%H%M%S")}.html"].compact)
+ unless Capybara.save_and_open_page_path.blank? || File.directory?(Capybara.save_and_open_page_path )
+ FileUtils.mkdir_p(Capybara.save_and_open_page_path)
+ end
FileUtils.touch(name) unless File.exist?(name)
tempfile = File.new(name,'w')
@@ -5,18 +5,12 @@
describe Capybara::SaveAndOpenPage do
describe "#save_save_and_open_page" do
before do
-
@time = Time.new.strftime("%Y%m%d%H%M%S")
- @name = "capybara-#{@time}.html"
@temp_file = mock("FILE")
@temp_file.stub!(:write)
@temp_file.stub!(:close)
- @temp_file.stub!(:path).and_return(@name)
-
- File.should_receive(:exist?).and_return true
- File.should_receive(:new).and_return @temp_file
-
+
@html = <<-HTML
<html>
<head>
@@ -30,14 +24,60 @@
Launchy::Browser.stub(:run)
end
- it "should create a new temporary file" do
- @temp_file.should_receive(:write).with @html
- Capybara::SaveAndOpenPage.save_and_open_page @html
+ describe "defaults" do
+ before do
+ @name = "capybara-#{@time}.html"
+
+ @temp_file.stub!(:path).and_return(@name)
+
+ File.should_receive(:exist?).and_return true
+ File.should_receive(:new).and_return @temp_file
+ end
+
+ it "should create a new temporary file" do
+ @temp_file.should_receive(:write).with @html
+ Capybara::SaveAndOpenPage.save_and_open_page @html
+ end
+
+ it "should open the file in the browser" do
+ Capybara::SaveAndOpenPage.should_receive(:open_in_browser).with(@name)
+ Capybara::SaveAndOpenPage.save_and_open_page @html
+ end
end
+
+ describe "custom output path" do
+ before do
+ @custom_path = File.join('tmp', 'capybara')
+ @custom_name = File.join(@custom_path, "capybara-#{@time}.html")
- it "should open the file in the browser" do
- Capybara::SaveAndOpenPage.should_receive(:open_in_browser).with(@name)
- Capybara::SaveAndOpenPage.save_and_open_page @html
+ @temp_file.stub!(:path).and_return(@custom_name)
+
+ Capybara.should_receive(:save_and_open_page_path).at_least(:once).and_return(@custom_path)
+ end
+
+ it "should create a new temporary file in the custom path" do
+ File.should_receive(:directory?).and_return true
+ File.should_receive(:exist?).and_return true
+ File.should_receive(:new).and_return @temp_file
+
+ @temp_file.should_receive(:write).with @html
+ Capybara::SaveAndOpenPage.save_and_open_page @html
+ end
+
+ it "should open the file - in the custom path - in the browser" do
+ Capybara::SaveAndOpenPage.should_receive(:open_in_browser).with(@custom_name)
+ Capybara::SaveAndOpenPage.save_and_open_page @html
+ end
+
+ it "should be possible to configure output path" do
+ Capybara.should respond_to(:save_and_open_page_path)
+ default_setting = Capybara.save_and_open_page_path
+ lambda {
+ Capybara.save_and_open_page_path = File.join('tmp', 'capybara')
+ Capybara.save_and_open_page_path.should == File.join('tmp', 'capybara')
+ }.should_not raise_error
+ Capybara.save_and_open_page_path = default_setting
+ end
end
end
end

1 comment on commit af1df52

@jnicklas

Merged, thanks!

Please sign in to comment.