wraith 2.8.1 → 3.0.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.
@@ -1,8 +1,9 @@
1
+ require "rspec"
2
+ require "./lib/wraith/cli"
3
+
1
4
  def create_diff_image
2
- wraith.engine.each do |_type, engine|
3
- saving.capture_page_image(engine, test_url1, 320, test_image1, selector, 'false', 'false')
4
- saving.capture_page_image(engine, test_url2, 320, test_image2, selector, 'false', 'false')
5
- end
5
+ saving.capture_page_image(wraith.engine, test_url1, 320, test_image1, selector, 'false', 'false')
6
+ saving.capture_page_image(wraith.engine, test_url2, 320, test_image2, selector, 'false', 'false')
6
7
  end
7
8
 
8
9
  def crop_images
@@ -0,0 +1,81 @@
1
+ require "_helpers"
2
+
3
+ describe Wraith do
4
+ let(:config_name) { get_path_relative_to __FILE__, "./configs/test_config--casper.yaml" }
5
+ let(:test_url1) { "http://www.bbc.com/afrique" }
6
+ let(:diff_image) { "shots/test/test_diff.png" }
7
+ let(:data_txt) { "shots/test/test.txt" }
8
+ let(:saving) { Wraith::SaveImages.new(config_name) }
9
+ let(:wraith) { Wraith::Wraith.new(config_name) }
10
+ let(:selector) { "body" }
11
+ let(:before_suite_js) { "spec/js/global.js" }
12
+ let(:before_capture_js) { "spec/js/path.js" }
13
+
14
+ describe "When hooking into beforeCapture (CasperJS)" do
15
+
16
+ it "Executes the global JS before capturing" do
17
+ run_js_then_capture(
18
+ global_js: before_suite_js,
19
+ path_js: 'false',
20
+ output_should_look_like: 'spec/base/global.png',
21
+ engine: 'casperjs'
22
+ )
23
+ end
24
+
25
+ it "Executes the path-level JS before capturing" do
26
+ run_js_then_capture(
27
+ global_js: 'false',
28
+ path_js: before_capture_js,
29
+ output_should_look_like: 'spec/base/path.png',
30
+ engine: 'casperjs'
31
+ )
32
+ end
33
+
34
+ it "Executes the global JS before the path-level JS" do
35
+ run_js_then_capture(
36
+ global_js: before_suite_js,
37
+ path_js: before_capture_js,
38
+ output_should_look_like: 'spec/base/path.png',
39
+ engine: 'casperjs'
40
+ )
41
+ end
42
+ end
43
+
44
+ # @TODO - uncomment and figure out why broken
45
+ # describe "When hooking into beforeCapture (PhantomJS)" do
46
+ # let(:config_name) { get_path_relative_to __FILE__, "./configs/test_config--phantom.yaml" }
47
+ # let(:saving) { Wraith::SaveImages.new(config_name) }
48
+ # let(:wraith) { Wraith::Wraith.new(config_name) }
49
+ # let(:selector) { "body" }
50
+ # let(:before_suite_js) { "../../spec/js/global.js" }
51
+ # let(:before_capture_js) { "../../spec/js/path.js" }
52
+
53
+ # it "Executes the global JS before capturing" do
54
+ # run_js_then_capture(
55
+ # global_js: before_suite_js,
56
+ # path_js: 'false',
57
+ # output_should_look_like: 'spec/base/global.png',
58
+ # engine: 'phantomjs'
59
+ # )
60
+ # end
61
+
62
+ # it "Executes the path-level JS before capturing" do
63
+ # run_js_then_capture(
64
+ # global_js: 'false',
65
+ # path_js: before_capture_js,
66
+ # output_should_look_like: 'spec/base/path.png',
67
+ # engine: 'phantomjs'
68
+ # )
69
+ # end
70
+
71
+ # it "Executes the global JS before the path-level JS" do
72
+ # run_js_then_capture(
73
+ # global_js: before_suite_js,
74
+ # path_js: before_capture_js,
75
+ # output_should_look_like: 'spec/base/path.png',
76
+ # engine: 'phantomjs'
77
+ # )
78
+ # end
79
+ # end
80
+
81
+ end
@@ -0,0 +1,139 @@
1
+ require "_helpers"
2
+
3
+ describe "wraith config" do
4
+
5
+ let(:config_name) { get_path_relative_to __FILE__, "./configs/test_config--phantom.yaml" }
6
+ let(:wraith) { Wraith::Wraith.new(config_name) }
7
+
8
+ describe "Config" do
9
+ it "returns a Wraith class" do
10
+ expect(wraith).is_a? Wraith::Wraith
11
+ end
12
+
13
+ it "when config is loaded" do
14
+ expect(wraith).to respond_to :config
15
+ end
16
+
17
+ it "contains shot options" do
18
+ expect(wraith.config).to include "directory" => "shots"
19
+ end
20
+ end
21
+
22
+ describe "When creating a wraith worker" do
23
+
24
+ it "should have a browser engine defined" do
25
+ expect(wraith.engine).to be_a String
26
+ end
27
+
28
+ it "should have a directory defined" do
29
+ expect(wraith.directory).to be_a String
30
+ end
31
+
32
+ it "should have domains defined" do
33
+ expect(wraith.domains).to be_a Hash
34
+ end
35
+
36
+ it "should have screen widths defined" do
37
+ expect(wraith.widths).to be_a Array
38
+ end
39
+
40
+ it "should have paths defined" do
41
+ expect(wraith.paths).to be_a Hash
42
+ end
43
+
44
+ it "should have fuzz defined" do
45
+ expect(wraith.fuzz).to be_a String
46
+ end
47
+
48
+ it "should have widths" do
49
+ expect(wraith.widths).to eq [320, 600, 1280]
50
+ end
51
+
52
+ it "include base domain" do
53
+ expect(wraith.base_domain).to eq "http://www.bbc.com/afrique"
54
+ end
55
+
56
+ it "include compare domain" do
57
+ expect(wraith.comp_domain).to eq "http://www.bbc.com/russian"
58
+ end
59
+
60
+ it "include base label" do
61
+ expect(wraith.base_domain_label).to eq "afrique"
62
+ end
63
+
64
+ it "include compare label" do
65
+ expect(wraith.comp_domain_label).to eq "russian"
66
+ end
67
+
68
+ it "include compare label" do
69
+ expect(wraith.paths).to eq("home" => "/", "uk_index" => "/uk")
70
+ end
71
+ end
72
+
73
+ describe "different ways of initialising browser engine" do
74
+
75
+ it "should let us directly specify the engine" do
76
+ config = YAML.load 'browser: phantomjs'
77
+ wraith = Wraith::Wraith.new(config, true)
78
+
79
+ expect(wraith.engine).to eq 'phantomjs'
80
+ end
81
+
82
+ it "should be backwards compatible with the old way" do
83
+ config = YAML.load '
84
+ browser:
85
+ phantomjs: "casperjs"
86
+ '
87
+ wraith = Wraith::Wraith.new(config, true)
88
+ expect(wraith.engine).to eq 'casperjs'
89
+ end
90
+ end
91
+
92
+ describe "different ways of determining the snap file" do
93
+
94
+ it "should calculate the snap file from the engine" do
95
+ config = YAML.load 'browser: phantomjs'
96
+ wraith = Wraith::Wraith.new(config, true)
97
+ expect(wraith.snap_file).to include 'lib/wraith/javascript/phantom.js'
98
+
99
+ config = YAML.load 'browser: casperjs'
100
+ wraith = Wraith::Wraith.new(config, true)
101
+ expect(wraith.snap_file).to include 'lib/wraith/javascript/casper.js'
102
+ end
103
+
104
+ it "should calculate the snap file in a backwards-compatible way" do
105
+ config = YAML.load '
106
+ browser:
107
+ phantomjs: "casperjs"
108
+ '
109
+ wraith = Wraith::Wraith.new(config, true)
110
+ expect(wraith.snap_file).to include 'lib/wraith/javascript/casper.js'
111
+ end
112
+
113
+ it "should allow users to specify their own snap file" do
114
+ config = YAML.load '
115
+ browser: casperjs
116
+ snap_file: path/to/snap.js
117
+ '
118
+ wraith = Wraith::Wraith.new(config, true)
119
+ expect(wraith.snap_file).to eq 'path/to/snap.js'
120
+ end
121
+ end
122
+
123
+ describe "different modes of efficiency (resize or reload)" do
124
+
125
+ it "should trigger efficient mode if resize was specified" do
126
+ config = YAML.load 'resize_or_reload: "resize"'
127
+ wraith = Wraith::Wraith.new(config, true)
128
+ expect(wraith.resize)
129
+ end
130
+
131
+ it "should fall back to slow mode if reload was specified" do
132
+ config = YAML.load 'resize_or_reload: "reload"'
133
+ wraith = Wraith::Wraith.new(config, true)
134
+ expect(wraith.resize).to eq false
135
+ end
136
+
137
+ end
138
+
139
+ end
@@ -8,8 +8,8 @@ browser:
8
8
  phantomjs: "casperjs"
9
9
  # slimerjs: "slimerjs"
10
10
 
11
- #If you want to have multiple snapping files, set the file name here
12
- snap_file: "templates/javascript/casper.js"
11
+ #overriding the snap file
12
+ snap_file: "spec/js/custom_snap_file.js"
13
13
 
14
14
  # Type the name of the directory that shots will be stored in
15
15
  directory: 'shots'
@@ -6,10 +6,10 @@
6
6
  #Headless browser option
7
7
  browser:
8
8
  phantomjs: "phantomjs"
9
- # slimerjs: "slimerjs"
10
9
 
11
- #If you want to have multiple snapping files, set the file name here
12
- snap_file: "templates/javascript/phantom.js"
10
+ # we've deliberately left out the snap_file
11
+
12
+ resize_or_reload: resize
13
13
 
14
14
  # Type the name of the directory that shots will be stored in
15
15
  directory: 'shots'
@@ -0,0 +1,38 @@
1
+ require "_helpers"
2
+
3
+ describe Wraith do
4
+ let(:config_name) { get_path_relative_to __FILE__, "./configs/test_config--phantom.yaml" }
5
+ let(:gallery) { Wraith::GalleryGenerator.new(config_name, false) }
6
+
7
+ describe "When generating gallery" do
8
+
9
+ it "should not break when there is a `-` in the filename" do
10
+ dirs = gallery.parse_directories 'spec/thumbnails'
11
+
12
+ images = [
13
+ {
14
+ :filename => 'home/test_image-afrique.png',
15
+ :thumb => 'thumbnails/home/test_image-afrique.png'
16
+ },
17
+ {
18
+ :filename => 'home/test_image-russian.png',
19
+ :thumb => 'thumbnails/home/test_image-russian.png'
20
+ }
21
+ ]
22
+
23
+ dirs['home'][0][:variants].each_with_index do |image, i|
24
+ expect(image[:filename]).to eq images[i][:filename]
25
+ expect(image[:thumb]).to eq images[i][:thumb]
26
+ end
27
+
28
+ diff = {
29
+ :filename => 'home/test_image-diff.png',
30
+ :thumb => 'thumbnails/home/test_image-diff.png'
31
+ }
32
+
33
+ expect(dirs['home'][0][:diff][:filename]).to eq 'home/test_image-diff.png'
34
+ expect(dirs['home'][0][:diff][:thumb]).to eq 'thumbnails/home/test_image-diff.png'
35
+ end
36
+ end
37
+
38
+ end
@@ -4,7 +4,11 @@ var system = require('system'),
4
4
 
5
5
  // command line arguments
6
6
  var url = casper.cli.get(0),
7
- dimensions = requireRelative('_getDimensions.js')(casper.cli.get(1)),
7
+ dimensions_tmp = /(\d*)x?((\d*))?/i.exec(casper.cli.get(1));
8
+ dimensions = {
9
+ 'viewportWidth': parseInt(dimensions_tmp[1]),
10
+ 'viewportHeight': parseInt(dimensions_tmp[2] || 1500)
11
+ },
8
12
  image_name = casper.cli.get(2),
9
13
  selector = casper.cli.get(3),
10
14
  globalBeforeCaptureJS = casper.cli.get(4),
@@ -0,0 +1,55 @@
1
+ require "_helpers"
2
+
3
+ describe "wraith config" do
4
+
5
+ let(:config_name) { get_path_relative_to __FILE__, "./configs/test_config--phantom.yaml" }
6
+ let(:saving) { Wraith::SaveImages.new(config_name) }
7
+
8
+ describe "saving images" do
9
+
10
+ it "should pass the width plainly to the CLI when running in inefficient mode" do
11
+ prepared_width = saving.prepare_widths_for_cli 432
12
+ expect(prepared_width).to eq 432
13
+ end
14
+
15
+ it "should pass an array of widths to CLI when running in efficient mode" do
16
+ prepared_width = saving.prepare_widths_for_cli [432, 21, 100]
17
+ expect(prepared_width).to eq "'432','21','100'"
18
+ end
19
+
20
+ it "should create fewer jobs when in efficient mode" do
21
+ base_config = '
22
+ domains:
23
+ test: http://www.bbc.com
24
+ paths:
25
+ test: /mypage
26
+ screen_widths:
27
+ - 320
28
+ - 464
29
+ - 624
30
+ '
31
+ efficient_config = YAML.load(base_config + "
32
+ resize_or_reload: resize
33
+ ")
34
+ efficient_saving = Wraith::SaveImages.new(efficient_config, false, true)
35
+ inefficient_config = YAML.load(base_config + "
36
+ resize_or_reload: reload
37
+ ")
38
+ inefficient_saving = Wraith::SaveImages.new(inefficient_config, false, true)
39
+
40
+ efficient_jobs = efficient_saving.define_jobs
41
+ inefficient_jobs = inefficient_saving.define_jobs
42
+
43
+ expect(efficient_jobs.length).to be 1
44
+ expect(inefficient_jobs.length).to be 3 # 1 for each screen width
45
+
46
+ # [["test", "/mypage", "'320','464','624'", "http://www.bbc.com/mypage", "/test/MULTI__test.png", " ", "false", "false"]]
47
+ expect(efficient_jobs[0][2]).to eq "'320','464','624'"
48
+
49
+ # [["test", "/mypage", 320, "http://www.bbc.com/mypage", "/test/320__test.png", " ", "false", "false"], ["test", "/mypage", 464, "http://www.bbc.com/mypage", "/test/464__test.png", " ", "false", "false"], ["test", "/mypage", 624, "http://www.bbc.com/mypage", "/test/624__test.png", " ", "false", "false"]]
50
+ expect(inefficient_jobs[0][2]).to eq 320
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,54 @@
1
+ require "_helpers"
2
+ require "image_size"
3
+
4
+ describe Wraith do
5
+ let(:config_name) { get_path_relative_to __FILE__, "./configs/test_config--phantom.yaml" }
6
+ let(:test_url1) { "http://www.bbc.com/afrique" }
7
+ let(:test_url2) { "http://www.bbc.com/russian" }
8
+ let(:test_image1) { "shots/test/test1.png" }
9
+ let(:test_image2) { "shots/test/test(2).png" }
10
+ let(:diff_image) { "shots/test/test_diff.png" }
11
+ let(:data_txt) { "shots/test/test.txt" }
12
+ let(:selector) { "" }
13
+ let(:saving) { Wraith::SaveImages.new(config_name) }
14
+ let(:wraith) { Wraith::Wraith.new(config_name) }
15
+
16
+ before(:each) do
17
+ Wraith::FolderManager.new(config_name).clear_shots_folder
18
+ Dir.mkdir("shots/test")
19
+ end
20
+
21
+ describe "When capturing an image" do
22
+ let(:image_size) { ImageSize.path(test_image1).size }
23
+
24
+ it "saves image" do
25
+ saving.capture_page_image(wraith.engine, test_url1, 320, test_image1, selector, 'false', 'false')
26
+ expect(image_size[0]).to eq 320
27
+ end
28
+ end
29
+
30
+ describe "When comparing images" do
31
+ it "should compare" do
32
+ create_diff_image
33
+ crop_images
34
+ compare_images
35
+
36
+ diff = ImageSize.path(diff_image).size
37
+
38
+ expect(diff[0]).to eq 320
39
+ end
40
+ end
41
+
42
+ describe "When generating thumbnails" do
43
+ it "produce thumbnails" do
44
+ create_diff_image
45
+ crop_images
46
+ Wraith::CompareImages.new(config_name).compare_task(test_image1, test_image2, diff_image, data_txt)
47
+ Wraith::Thumbnails.new(config_name).generate_thumbnails
48
+
49
+ expect(File).to exist("shots/thumbnails/test/test1.png")
50
+ expect(File).to exist("shots/thumbnails/test/test(2).png")
51
+ expect(File).to exist("shots/thumbnails/test/test_diff.png")
52
+ end
53
+ end
54
+ end
@@ -34,14 +34,11 @@ screen_widths:
34
34
  - 1024
35
35
  - 1280
36
36
 
37
- # the engine to run Wraith with.
38
- browser:
39
- phantomjs: "casperjs" # variant of PhantomJS that allows screenshots by element selector
40
- #phantomjs: "phantomjs" # PhantomJS, built on top of Webkit and JavascriptCore (like Safari)
41
- #slimerjs: "slimerjs" # SlimerJS, built on top of Gecko and SpiderMonkey (like Firefox)
37
+ # resize to each screen width, or reload at each screen width. (The former is more efficient).
38
+ resize_or_reload: 'resize'
42
39
 
43
- # the file in charge of taking the screenshot
44
- snap_file: "javascript/casper.js"
40
+ # the engine to run Wraith with.
41
+ browser: "casperjs"
45
42
 
46
43
  # the directory that your base screenshots will be stored in
47
44
  history_dir: 'shots_base'