capybara-webkit 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -4
  3. data/Appraisals +0 -8
  4. data/Gemfile.lock +5 -5
  5. data/NEWS.md +7 -0
  6. data/capybara-webkit.gemspec +1 -1
  7. data/extconf.rb +18 -0
  8. data/gemfiles/2.3.gemfile.lock +2 -2
  9. data/gemfiles/2.4.gemfile.lock +2 -2
  10. data/lib/capybara/webkit/browser.rb +14 -0
  11. data/lib/capybara/webkit/driver.rb +12 -0
  12. data/lib/capybara/webkit/version.rb +1 -1
  13. data/lib/capybara_webkit_builder.rb +18 -2
  14. data/spec/driver_spec.rb +99 -28
  15. data/spec/support/app_runner.rb +4 -4
  16. data/spec/support/output_writer.rb +15 -0
  17. data/src/AllowUrl.cpp +16 -0
  18. data/src/AllowUrl.h +10 -0
  19. data/src/BlacklistedRequestHandler.cpp +56 -0
  20. data/src/BlacklistedRequestHandler.h +22 -0
  21. data/src/BlockUrl.cpp +16 -0
  22. data/src/BlockUrl.h +10 -0
  23. data/src/CommandFactory.cpp +3 -0
  24. data/src/CustomHeadersRequestHandler.cpp +37 -0
  25. data/src/CustomHeadersRequestHandler.h +21 -0
  26. data/src/Header.cpp +1 -2
  27. data/src/MissingContentHeaderRequestHandler.cpp +23 -0
  28. data/src/MissingContentHeaderRequestHandler.h +15 -0
  29. data/src/NetworkAccessManager.cpp +35 -53
  30. data/src/NetworkAccessManager.h +14 -9
  31. data/src/NetworkRequestFactory.cpp +15 -0
  32. data/src/NetworkRequestFactory.h +12 -0
  33. data/src/NoOpReply.cpp +1 -1
  34. data/src/NoOpReply.h +1 -1
  35. data/src/RequestHandler.cpp +4 -0
  36. data/src/RequestHandler.h +25 -0
  37. data/src/SetUnknownUrlMode.cpp +27 -0
  38. data/src/SetUnknownUrlMode.h +10 -0
  39. data/src/SetUrlBlacklist.cpp +1 -2
  40. data/src/SetUrlBlacklist.h +0 -2
  41. data/src/UnknownUrlHandler.cpp +70 -0
  42. data/src/UnknownUrlHandler.h +28 -0
  43. data/src/WebPageManager.cpp +41 -1
  44. data/src/WebPageManager.h +12 -1
  45. data/src/capybara.js +2 -1
  46. data/src/find_command.h +3 -0
  47. data/src/webkit_server.pro +20 -2
  48. metadata +23 -10
  49. data/gemfiles/2.0.gemfile +0 -7
  50. data/gemfiles/2.0.gemfile.lock +0 -76
  51. data/gemfiles/2.1.gemfile +0 -7
  52. data/gemfiles/2.1.gemfile.lock +0 -83
  53. data/gemfiles/2.2.gemfile +0 -7
  54. data/gemfiles/2.2.gemfile.lock +0 -77
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: caa991e4ca62a2ae01175d74269b04c85109d019
4
- data.tar.gz: 9715e5c18998f8d6b33fa73de57d01e64c59413b
3
+ metadata.gz: b148922bff655cfceedb08dcae431c0bed0cad26
4
+ data.tar.gz: b3dc9996d98dd05e943092e4bd20be8303c4cc64
5
5
  SHA512:
6
- metadata.gz: 2bdd5799550be5189825638154cd8f49e79bb5428de741369a6889cfb01f6e4591562efd162cf02d2232757075d3736b595826daa4ca78ffefed96074e8534cc
7
- data.tar.gz: 86aef4be069c961c3fd8a9b5f0cdcb93eb7f935c90741b2f4a80542aefdba23ff62a2c5540692abb3ea286b39c1d46eb3a79be5247288884f3784d580b348757
6
+ metadata.gz: b706abb8a485e9903dae782e60197643a7cdba29a96eed8fcc16550973f1144a176cf2a285e5cd9a81f6c4134bafad2a6a868f6e13af0f7adcdf3d1a36875652
7
+ data.tar.gz: 960b0b5dbe21488c2ee3163c9fe88715dca6e0a540b16e82d660762f1d7b4b9ba18413213a2bddad956e0b0e87cf948c10660ad339dab5d442875d310d0f10c8
data/.travis.yml CHANGED
@@ -12,9 +12,6 @@ env:
12
12
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
13
13
  matrix:
14
14
  include:
15
- - rvm: 1.9.3
16
- gemfile: gemfiles/2.2.gemfile
17
- env: QMAKE=/usr/lib/x86_64-linux-gnu/qt5/bin/qmake
18
15
  - rvm: 1.9.3
19
16
  gemfile: gemfiles/2.3.gemfile
20
17
  env: QMAKE=/usr/lib/x86_64-linux-gnu/qt5/bin/qmake
@@ -22,7 +19,6 @@ matrix:
22
19
  gemfile: gemfiles/2.4.gemfile
23
20
  env: QMAKE=/usr/lib/x86_64-linux-gnu/qt5/bin/qmake
24
21
  gemfile:
25
- - gemfiles/2.2.gemfile
26
22
  - gemfiles/2.3.gemfile
27
23
  - gemfiles/2.4.gemfile
28
24
  before_install:
data/Appraisals CHANGED
@@ -1,11 +1,3 @@
1
- appraise "2.1" do
2
- gem "capybara", "~> 2.1.0"
3
- end
4
-
5
- appraise "2.2" do
6
- gem "capybara", "~> 2.2.0"
7
- end
8
-
9
1
  appraise "2.3" do
10
2
  gem "capybara", "~> 2.3.0"
11
3
  end
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- capybara-webkit (1.3.1)
5
- capybara (>= 2.0.2, < 2.5.0)
4
+ capybara-webkit (1.4.0)
5
+ capybara (>= 2.3.0, < 2.5.0)
6
6
  json
7
7
 
8
8
  GEM
@@ -33,10 +33,10 @@ GEM
33
33
  mime-types (2.4.3)
34
34
  mini_magick (3.2.1)
35
35
  subexec (~> 0.0.4)
36
- mini_portile (0.6.0)
36
+ mini_portile (0.6.1)
37
37
  multi_json (1.8.4)
38
- nokogiri (1.6.3.1)
39
- mini_portile (= 0.6.0)
38
+ nokogiri (1.6.4)
39
+ mini_portile (~> 0.6.0)
40
40
  rack (1.5.2)
41
41
  rack-protection (1.3.2)
42
42
  rack
data/NEWS.md CHANGED
@@ -1,3 +1,10 @@
1
+ New for 1.4.0:
2
+
3
+ * Fix returning invisible text on a hidden page
4
+ * Expose INCLUDEPATH and LIBS qmake variables
5
+ * Drop support for older Capybara versions
6
+ * Introduce allowed, blocked URL filters
7
+
1
8
  New for 1.3.1:
2
9
 
3
10
  * Inherit from Capybara::Driver::Base for Capybara 2.4.4 compatibility.
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.required_ruby_version = ">= 1.9.0"
21
21
 
22
- s.add_runtime_dependency("capybara", ">= 2.0.2", "< 2.5.0")
22
+ s.add_runtime_dependency("capybara", ">= 2.3.0", "< 2.5.0")
23
23
  s.add_runtime_dependency("json")
24
24
 
25
25
  s.add_development_dependency("rspec", "~> 2.14.0")
data/extconf.rb CHANGED
@@ -1,2 +1,20 @@
1
+ require "mkmf"
2
+
3
+ $CPPFLAGS = ""
4
+
5
+ dir_config("gl")
6
+ dir_config("zlib")
7
+
8
+ include_path = $CPPFLAGS.gsub("-I", "").strip
9
+ libs = $LIBPATH.map { |path| "-L#{path}"}.join(" ").strip
10
+
11
+ unless include_path.empty?
12
+ ENV["CAPYBARA_WEBKIT_INCLUDE_PATH"] = include_path
13
+ end
14
+
15
+ unless libs.empty?
16
+ ENV["CAPYBARA_WEBKIT_LIBS"] = libs
17
+ end
18
+
1
19
  require File.join(File.expand_path(File.dirname(__FILE__)), "lib", "capybara_webkit_builder")
2
20
  CapybaraWebkitBuilder.build_all
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- capybara-webkit (1.3.1)
5
- capybara (>= 2.0.2, < 2.5.0)
4
+ capybara-webkit (1.4.0)
5
+ capybara (>= 2.3.0, < 2.5.0)
6
6
  json
7
7
 
8
8
  GEM
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- capybara-webkit (1.3.1)
5
- capybara (>= 2.0.2, < 2.5.0)
4
+ capybara-webkit (1.4.0)
5
+ capybara (>= 2.3.0, < 2.5.0)
6
6
  json
7
7
 
8
8
  GEM
@@ -195,6 +195,8 @@ module Capybara::Webkit
195
195
  end
196
196
 
197
197
  def url_blacklist=(black_list)
198
+ warn '[DEPRECATION] Capybara::Webkit::Browser#url_blacklist= ' \
199
+ 'is deprecated. Please use page.driver.block_url instead.'
198
200
  command("SetUrlBlacklist", *Array(black_list))
199
201
  end
200
202
 
@@ -263,6 +265,18 @@ module Capybara::Webkit
263
265
  command("GoForward")
264
266
  end
265
267
 
268
+ def allow_url(url)
269
+ command("AllowUrl", url)
270
+ end
271
+
272
+ def block_url(url)
273
+ command("BlockUrl", url)
274
+ end
275
+
276
+ def block_unknown_urls
277
+ command("SetUnknownUrlMode", "block")
278
+ end
279
+
266
280
  private
267
281
 
268
282
  def check
@@ -21,6 +21,18 @@ module Capybara::Webkit
21
21
  browser.enable_logging
22
22
  end
23
23
 
24
+ def allow_url(url)
25
+ browser.allow_url(url)
26
+ end
27
+
28
+ def block_url(url)
29
+ browser.block_url(url)
30
+ end
31
+
32
+ def block_unknown_urls
33
+ browser.block_unknown_urls
34
+ end
35
+
24
36
  def current_url
25
37
  browser.current_url
26
38
  end
@@ -1,7 +1,7 @@
1
1
  module Capybara
2
2
  module Driver
3
3
  class Webkit
4
- VERSION = '1.3.1'.freeze
4
+ VERSION = '1.4.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,6 @@
1
1
  require "fileutils"
2
2
  require "rbconfig"
3
+ require "shellwords"
3
4
 
4
5
  module CapybaraWebkitBuilder
5
6
  extend self
@@ -52,8 +53,10 @@ module CapybaraWebkitBuilder
52
53
  success
53
54
  end
54
55
 
55
- def makefile(config = '')
56
- sh("#{qmake_bin} -spec #{spec} #{config}")
56
+ def makefile(*configs)
57
+ configs += default_configs
58
+ configs = configs.map { |config| config.shellescape}.join(" ")
59
+ sh("#{qmake_bin} -spec #{spec} #{configs}")
57
60
  end
58
61
 
59
62
  def qmake
@@ -82,6 +85,19 @@ module CapybaraWebkitBuilder
82
85
  end
83
86
  end
84
87
 
88
+ def default_configs
89
+ configs = []
90
+ libpath = ENV["CAPYBARA_WEBKIT_LIBS"]
91
+ cppflags = ENV["CAPYBARA_WEBKIT_INCLUDE_PATH"]
92
+ if libpath
93
+ configs << "LIBS += #{libpath}"
94
+ end
95
+ if cppflags
96
+ configs << "INCLUDEPATH += #{cppflags}"
97
+ end
98
+ configs
99
+ end
100
+
85
101
  def build_all
86
102
  makefile &&
87
103
  qmake &&
data/spec/driver_spec.rb CHANGED
@@ -561,6 +561,24 @@ describe Capybara::Webkit::Driver do
561
561
  end
562
562
  end
563
563
 
564
+ context "hidden text app" do
565
+ let(:driver) do
566
+ driver_for_html(<<-HTML)
567
+ <html>
568
+ <body>
569
+ <h1 style="display: none">Hello</h1>
570
+ </body>
571
+ </html>
572
+ HTML
573
+ end
574
+
575
+ before { visit("/") }
576
+
577
+ it "has no visible text" do
578
+ driver.find_xpath("/html").first.text.should be_empty
579
+ end
580
+ end
581
+
564
582
  context "console messages app" do
565
583
  let(:driver) do
566
584
  driver_for_html(<<-HTML)
@@ -2568,10 +2586,10 @@ CACHE MANIFEST
2568
2586
  end
2569
2587
 
2570
2588
  before do
2571
- driver.browser.url_blacklist = ["http://example.org/path/to/file",
2572
- "http://example.*/foo/*",
2573
- "http://example.com",
2574
- "#{AppRunner.app_host}/script"]
2589
+ driver.block_url "http://example.org/path/to/file"
2590
+ driver.block_url "http://example.*/foo/*"
2591
+ driver.block_url "http://example.com"
2592
+ driver.block_url "#{AppRunner.app_host}/script"
2575
2593
  end
2576
2594
 
2577
2595
  it "should not fetch urls blocked by host" do
@@ -2615,6 +2633,69 @@ CACHE MANIFEST
2615
2633
  end
2616
2634
  end
2617
2635
 
2636
+ describe "url whitelisting" do
2637
+ it_behaves_like "output writer" do
2638
+ let(:driver) do
2639
+ driver_for_html(<<-HTML, browser)
2640
+ <<-HTML
2641
+ <html>
2642
+ <body>
2643
+ <iframe src="http://example.com/path" id="frame"></iframe>
2644
+ <iframe src="http://www.example.com" id="frame2"></iframe>
2645
+ </body>
2646
+ </html>
2647
+ HTML
2648
+ end
2649
+
2650
+ it "prints a warning for remote requests by default" do
2651
+ visit("/")
2652
+
2653
+ expect(stderr).to include("http://example.com/path")
2654
+ expect(stderr).not_to include(driver.current_url)
2655
+ end
2656
+
2657
+ it "can allow specific hosts" do
2658
+ driver.allow_url("example.com")
2659
+ driver.allow_url("www.example.com")
2660
+ visit("/")
2661
+
2662
+ expect(stderr).not_to include("http://example.com/path")
2663
+ expect(stderr).not_to include(driver.current_url)
2664
+ driver.within_frame("frame") do
2665
+ expect(driver.find("//body").first.text).not_to be_empty
2666
+ end
2667
+ end
2668
+
2669
+ it "can block unknown hosts" do
2670
+ driver.block_unknown_urls
2671
+ visit("/")
2672
+
2673
+ expect(stderr).not_to include("http://example.com/path")
2674
+ expect(stderr).not_to include(driver.current_url)
2675
+ driver.within_frame("frame") do
2676
+ expect(driver.find("//body").first.text).to be_empty
2677
+ end
2678
+ end
2679
+
2680
+ it "can allow urls with wildcards" do
2681
+ driver.allow_url("*/path")
2682
+ visit("/")
2683
+
2684
+ expect(stderr).to include("www.example.com")
2685
+ expect(stderr).not_to include("example.com/path")
2686
+ expect(stderr).not_to include(driver.current_url)
2687
+ end
2688
+
2689
+ it "whitelists localhost on reset" do
2690
+ driver.reset!
2691
+
2692
+ visit("/")
2693
+
2694
+ expect(stderr).not_to include(driver.current_url)
2695
+ end
2696
+ end
2697
+ end
2698
+
2618
2699
  describe "timeout for long requests" do
2619
2700
  let(:driver) do
2620
2701
  driver_for_app do
@@ -2688,33 +2769,23 @@ CACHE MANIFEST
2688
2769
  end
2689
2770
 
2690
2771
  describe "logger app" do
2691
- it "logs nothing before turning on the logger" do
2692
- visit("/")
2693
- @write.close
2694
- log.should_not include logging_message
2695
- end
2696
-
2697
- it "logs its commands after turning on the logger" do
2698
- driver.enable_logging
2699
- visit("/")
2700
- @write.close
2701
- log.should include logging_message
2702
- end
2703
-
2704
- before do
2705
- @read, @write = IO.pipe
2706
- end
2772
+ it_behaves_like "output writer" do
2773
+ let(:driver) do
2774
+ driver_for_html("<html><body>Hello</body></html>", browser)
2775
+ end
2707
2776
 
2708
- let(:logging_message) { 'Wrote response true' }
2777
+ it "logs nothing before turning on the logger" do
2778
+ visit("/")
2779
+ stderr.should_not include logging_message
2780
+ end
2709
2781
 
2710
- let(:driver) do
2711
- connection = Capybara::Webkit::Connection.new(:stderr => @write)
2712
- browser = Capybara::Webkit::Browser.new(connection)
2713
- Capybara::Webkit::Driver.new(AppRunner.app, :browser => browser)
2714
- end
2782
+ it "logs its commands after turning on the logger" do
2783
+ driver.enable_logging
2784
+ visit("/")
2785
+ stderr.should include logging_message
2786
+ end
2715
2787
 
2716
- def log
2717
- @read.read
2788
+ let(:logging_message) { 'Wrote response true' }
2718
2789
  end
2719
2790
  end
2720
2791
 
@@ -31,9 +31,9 @@ module AppRunner
31
31
  build_driver
32
32
  end
33
33
 
34
- def driver_for_html(html)
34
+ def driver_for_html(html, *driver_args)
35
35
  run_application_for_html html
36
- build_driver
36
+ build_driver(*driver_args)
37
37
  end
38
38
 
39
39
  def session_for_app(&body)
@@ -50,8 +50,8 @@ module AppRunner
50
50
 
51
51
  private
52
52
 
53
- def build_driver
54
- Capybara::Webkit::Driver.new(AppRunner.app, :browser => $webkit_browser)
53
+ def build_driver(browser = $webkit_browser)
54
+ Capybara::Webkit::Driver.new(AppRunner.app, :browser => browser)
55
55
  end
56
56
 
57
57
  def self.included(example_group)
@@ -0,0 +1,15 @@
1
+ shared_examples_for "output writer" do
2
+ before do
3
+ @read, @write = IO.pipe
4
+ end
5
+
6
+ let(:browser) do
7
+ connection = Capybara::Webkit::Connection.new(:stderr => @write)
8
+ Capybara::Webkit::Browser.new(connection)
9
+ end
10
+
11
+ let(:stderr) do
12
+ @write.close
13
+ @read.read
14
+ end
15
+ end
data/src/AllowUrl.cpp ADDED
@@ -0,0 +1,16 @@
1
+ #include "AllowUrl.h"
2
+ #include "SocketCommand.h"
3
+ #include "WebPage.h"
4
+ #include "WebPageManager.h"
5
+
6
+ AllowUrl::AllowUrl(
7
+ WebPageManager *manager,
8
+ QStringList &arguments,
9
+ QObject *parent
10
+ ) : SocketCommand(manager, arguments, parent) {
11
+ }
12
+
13
+ void AllowUrl::start() {
14
+ manager()->allowUrl(arguments()[0]);
15
+ finish(true);
16
+ }