ojo 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc965e4b05eb265b42f3fc22c46f5898222a3fb4
4
- data.tar.gz: 19f1b43550134f0982c9dd5030b6702a510d6ee5
3
+ metadata.gz: 618f3f1156655238dadfee25fab6f745dd8f139f
4
+ data.tar.gz: 14b41142ea5e12eec0546265fbf71aaa216c79dc
5
5
  SHA512:
6
- metadata.gz: e5d09e1f5ff347541cb6909029a886f7f55ee840b07514a7ed16e68eac05e12480b3530cb2f72cfe9f206362f347594f967b93f5a337970b8982aa8c067ea1e2
7
- data.tar.gz: 0c891cfee69440cdf3f8c8b82badd7029c137aae5875cbbb6d400e89cd11e6a66923cfa61398842c4f0a8d6b7c4e78c5206762769ed00aeb0de7b2024672cfbe
6
+ metadata.gz: f707ead3df40588506279ed6aa0e55e43009fe29d5527eb9b484641fc2874fbd5b79ef9827739b06ab52c027a762f2a9842b023261f672485cf58d1d3cd1ff8c
7
+ data.tar.gz: 0df91c4cf4dded44d9d5e74576943ceda98b6731de2422fa278fa8ba5660be0a51ee6bc34ef2562d769c48dad3e71320d77383898d63b04e45da0361cfadbd90
data/README.md CHANGED
@@ -68,25 +68,30 @@ After both sets of data have been run, the `Ojo` rake task `ojo:compare[branch_1
68
68
  #### run
69
69
 
70
70
  >> rake ojo:compare[master,login_page_update]
71
- +-----------------------------------------------------------------------------------------------------------------------------------------+
72
- | Ojo v.0.0.1 |
73
- | file location: /Users/geordie/src/faktory/tmp/appearance |
74
- | 10/17/2014 |
75
- +-----------------------------------------------------------------------------------------------------------------------------------------+
76
- | master | login_page_update | Results |
77
- |--------------------------------------------------------------+--------------------------------------------------------------+-----------|
78
- | current_user.png | current_user.png | FAIL |
79
- | master_only.png | | -- |
80
- | signed_in.png | signed_in.png | PASS |
81
- | test_home.png | test_home.png | PASS |
82
- | user.png | user.png | FAIL |
83
- | | login_update_only.png | -- |
84
- +-----------------------------------------------------------------------------------------------------------------------------------------+
85
- | Results: 2 files were found to be different |
86
- | Difference Files at /path/to/screenshots/diff |
87
- +-----------------------------------------------------------------------------------------------------------------------------------------+
88
-
89
- you can see here that not everything passed (or was exactly the same) in each test case. the `user` and `current_user` cases did not pass. to investigate why, you can look at the `diff` directory under `/path/to/screenshots/`. you will see what differences were found in each test case.
71
+
72
+ +---------------------------------------------------------------------------------------------+
73
+ | Ojo v.1.0.1 |
74
+ | file location: /path/to/screenshots |
75
+ | 04/02/2015 |
76
+ | data sets compared: master & login_page_update |
77
+ +---------------------------------------------------------------------------------------------+
78
+ | File | | Magnitude |
79
+ |--------------------------------------------------------------+---+--------------------------|
80
+ | current_user.png | F | ████████████████████████ |
81
+ | user.png | F | █████████████ |
82
+ | signed_in.png | P | |
83
+ | test_home.png | P | |
84
+ | master_only.png | - | |
85
+ | login_update_only.png | - | |
86
+ +---------------------------------------------------------------------------------------------+
87
+ | Results: 2 files were found to be different |
88
+ | Difference Files at /path/to/screenshots/diff |
89
+ +---------------------------------------------------------------------------------------------+
90
+ >> _
91
+
92
+ you can see here that not everything passed (or was exactly the same) in each test case. the __user__ and __current_user__ cases did not pass. to investigate, you can look at the _diff_ directory under _/path/to/screenshots/_. you will see what differences were found in each test case.
93
+
94
+ the __Magnitude__ column is a relative representation of the number of pixels found that changed between the two screenshots. it only shows relative levels of _failiness_.
90
95
 
91
96
  in addition, you can see that there were extra files in each data set. other comparisons are not affected.
92
97
 
data/Rakefile CHANGED
@@ -22,6 +22,14 @@ namespace :test do
22
22
  end
23
23
  end
24
24
 
25
+ desc 'demo'
26
+ Rake::TestTask.new :demo do |t|
27
+ t.libs << '.'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/demo/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
25
33
  task :test => %w(test:units test:phantom)
26
34
 
27
35
  task :default => :test
data/lib/ojo.rb CHANGED
@@ -12,6 +12,7 @@ require 'ojo/file_sizer'
12
12
  require 'ojo/image_magician'
13
13
  require 'ojo/data_sets'
14
14
  require 'ojo/manager'
15
+ require 'ojo/sorter'
15
16
 
16
17
  module Ojo
17
18
  include Collimator
@@ -6,7 +6,7 @@ module Ojo
6
6
  FileUtils.mkdir_p(File.join(::Ojo.configuration.location, 'diff'))
7
7
 
8
8
  all_same = true
9
- results = { :location => ::Ojo.configuration.location, :branch_1 => branch_1, :branch_2 => branch_2, :results => {} }
9
+ results = { :location => ::Ojo.configuration.location, :branch_1 => branch_1, :branch_2 => branch_2, :results => [] }
10
10
 
11
11
  ::Ojo::ProgressBar.start({:min => 0, :max => all_files.count, :method => :percent, :step_size => 1})
12
12
 
@@ -16,8 +16,8 @@ module Ojo
16
16
  file_1 = make_comparable_filename(branch_1, file)
17
17
  file_2 = make_comparable_filename(branch_2, file)
18
18
 
19
- this_same = compare_one_set(file_1, file_2, diff_file)
20
- results[:results][file] = { :same => this_same, :file_1 => file_1, :file_2 => file_2 }
19
+ this_same, not_same_pixel_count = compare_one_set(file_1, file_2, diff_file)
20
+ results[:results] << { :same => this_same, :file_1 => file_1, :file_2 => file_2, :not_same_pixel_count => not_same_pixel_count }
21
21
  all_same = all_same && (this_same != false)
22
22
 
23
23
  File.delete(diff_file) if this_same
@@ -18,7 +18,7 @@ module Ojo
18
18
  same = same && value.to_f == 0
19
19
  end
20
20
 
21
- return same
21
+ [same, color_values[:all].to_i]
22
22
  end
23
23
 
24
24
  private
data/lib/ojo/manager.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Ojo
2
2
  class Manager
3
+ MAGNITUDE_MAX = 24
4
+
3
5
  def location
4
6
  puts "Ojo file location: #{::Ojo.configuration.location}"
5
7
  end
@@ -42,7 +44,10 @@ module Ojo
42
44
  end
43
45
 
44
46
  results = ::Ojo::Ojo.new.compare(branch_1, branch_2)
45
- ::Ojo::Output.new.display_to_console results[1]
47
+ sorted_results = ::Ojo::Sorter.new(results[1], MAGNITUDE_MAX).sort
48
+
49
+ results[1][:results] = sorted_results
50
+ ::Ojo::Output.new(MAGNITUDE_MAX).display_to_console results[1]
46
51
  end
47
52
 
48
53
  end
data/lib/ojo/output.rb CHANGED
@@ -1,27 +1,42 @@
1
1
  module Ojo
2
2
  class Output
3
3
  include Collimator::Table
4
+ attr_reader :magnitude_max
5
+
6
+ def initialize(magnitude_max)
7
+ @magnitude_max = magnitude_max
8
+ end
4
9
 
5
10
  def display_to_console(data)
6
11
  format_table data
7
12
 
8
13
  failure_count = 0
9
14
 
10
- data[:results].each_key do |basename|
11
- file_1 = file_basename(data[:results][basename][:file_1])
12
- file_2 = file_basename(data[:results][basename][:file_2])
15
+ data[:results].each do |result|
16
+ filename = file_basename(result[:file_1]) || file_basename(result[:file_2])
13
17
 
14
18
  color = :blue
15
- result_text = '--'
16
-
17
- if test_performed?(data[:results][basename])
18
- same = data[:results][basename][:same]
19
- color = same ? :green : :red
20
- result_text = same ? 'PASS' : 'FAIL'
19
+ result_text = '-'
20
+ pixel_count = '-'
21
+
22
+ if test_performed?(result)
23
+ same = result[:same]
24
+ pixel_count = result[:not_same_pixel_count].to_s
25
+ color = if same
26
+ :green
27
+ else
28
+ pixel_count.to_i > 3 ? :red : :yellow
29
+ end
30
+ unless same
31
+ if pixel_count == 0
32
+ pixel_count = 1
33
+ end
34
+ end
35
+ result_text = same ? 'P' : 'F'
21
36
  failure_count += 1 unless same
22
37
  end
23
38
 
24
- one_row file_1, file_2, result_text, color
39
+ one_row filename, result_text, color, pixel_count
25
40
  end
26
41
  format_table_footer failure_count, data
27
42
  end
@@ -49,23 +64,25 @@ module Ojo
49
64
  Collimator::Table.header("Ojo v.#{VERSION}")
50
65
  Collimator::Table.header("file location: #{data[:location]}")
51
66
  Collimator::Table.header(Date.today.strftime('%m/%d/%Y'))
67
+ Collimator::Table.header("data sets compared: #{data[:branch_1]} & #{data[:branch_2]}")
52
68
  end
53
69
 
54
70
  def format_table(data)
55
71
  format_table_header data
56
72
 
57
- Collimator::Table.column(data[:branch_1], :width => 60, :padding => 2, :justification => :left)
58
- Collimator::Table.column(data[:branch_2], :width => 60, :padding => 2, :justification => :left)
59
- Collimator::Table.column('Results', :width => 11, :justification => :center)
73
+ Collimator::Table.column('File', :width => 60, :padding => 2, :justification => :left)
74
+ Collimator::Table.column('', :width => 3, :justification => :center)
75
+ Collimator::Table.column('Magnitude', :width => @magnitude_max + 1, :padding => 1, :justification => :left)
60
76
  end
61
77
 
62
- def one_row(file_1, file_2, result_text, color)
78
+ def one_row(file, result_text, color, magnitude = 0)
63
79
  max_printable_length = 50
80
+ bar_character = "\u2588"
81
+ magnitude_bar = bar_character * (magnitude.to_i > @magnitude_max ? @magnitude_max : magnitude.to_i)
64
82
 
65
- formatted_file_1 = make_printable_name(file_1, max_printable_length)
66
- formatted_file_2 = make_printable_name(file_2, max_printable_length)
83
+ formatted_file = make_printable_name(file, max_printable_length)
67
84
 
68
- row_data = [formatted_file_1, formatted_file_2, result_text]
85
+ row_data = [formatted_file, result_text, magnitude_bar]
69
86
  Collimator::Table.row(:data => row_data, :color => color)
70
87
  end
71
88
 
data/lib/ojo/sorter.rb ADDED
@@ -0,0 +1,39 @@
1
+ module Ojo
2
+ class Sorter
3
+ attr_accessor :results
4
+ attr_reader :magnitude_max
5
+
6
+ def initialize(results, magnitude_max)
7
+ @results = results
8
+ @magnitude_max = magnitude_max
9
+ end
10
+
11
+ def sort
12
+ sub_set = @results[:results]
13
+ sub_set.sort! do |a, b|
14
+ a_val = a[:not_same_pixel_count] ? a[:not_same_pixel_count] : 0
15
+ b_val = b[:not_same_pixel_count] ? b[:not_same_pixel_count] : 0
16
+ b_val <=> a_val
17
+ end
18
+ sub_set = scale_not_same_pixel_count(sub_set, magnitude_max)
19
+ end
20
+
21
+ private
22
+
23
+ def scale_not_same_pixel_count(data, max)
24
+ return data if data.first[:not_same_pixel_count] == 0
25
+
26
+ log_scaled_data_points = data.map { |point| Math.log(point[:not_same_pixel_count].to_s.to_f) }.map{ |point| point == -1.0/0.0 ? 0 : point }
27
+ largest_data_point = log_scaled_data_points.first
28
+ scale_factor = 1.0 * largest_data_point / max
29
+
30
+ new_data = []
31
+ data.each_with_index do |v, i|
32
+ modified = v.clone
33
+ modified[:not_same_pixel_count] = log_scaled_data_points[i] / scale_factor
34
+ new_data << modified
35
+ end
36
+ new_data
37
+ end
38
+ end
39
+ end
data/lib/ojo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ojo
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
@@ -0,0 +1,76 @@
1
+ require_relative '../test_helper'
2
+
3
+ class DemoTest < Ojo::OjoTestCase
4
+
5
+ def setup
6
+ create_location_directories
7
+ @manager = ::Ojo::Manager.new
8
+ Collimator::ProgressBar.stubs(:put_current_progress)
9
+ Collimator::ProgressBar.stubs(:complete)
10
+ end
11
+
12
+ def teardown
13
+ remove_location_directories
14
+ end
15
+
16
+ def test_locations
17
+ @manager.location
18
+ end
19
+
20
+ def test_data_sets
21
+ @manager.data_sets
22
+ end
23
+
24
+ def test_compare
25
+ make_some_real_files
26
+
27
+ branch_1_name = @branch_1.split('/').last
28
+ branch_2_name = @branch_2.split('/').last
29
+
30
+ @manager.compare branch_1_name, branch_2_name
31
+ end
32
+
33
+ def test_compare__missing_branch_names
34
+ make_some_real_files
35
+
36
+ branch_1_name = @branch_1.split('/').last
37
+ branch_2_name = @branch_2.split('/').last
38
+
39
+ @manager.compare nil, branch_2_name
40
+ puts ''
41
+ puts ''
42
+
43
+ @manager.compare branch_1_name, nil
44
+ puts ''
45
+ puts ''
46
+
47
+ branch_1a = File.join(@location, 'branch_1a')
48
+ FileUtils.mkdir_p(branch_1a)
49
+ file_1a = File.join(branch_1a, 'test_one.png')
50
+ generate_one_real_file file_1a
51
+
52
+ @manager.compare nil, nil
53
+ puts ''
54
+ puts ''
55
+
56
+ @manager.compare branch_1_name, branch_2_name
57
+ end
58
+
59
+ def test_compare__missing_files
60
+ make_some_real_files
61
+
62
+ filename = File.join(@branch_1, 'test_two.png')
63
+ generate_one_real_file filename
64
+ filename = File.join(@branch_2, 'test_three.png')
65
+ generate_one_real_file filename
66
+
67
+ Collimator::ProgressBar.stubs(:put_current_progress)
68
+ Collimator::ProgressBar.stubs(:complete)
69
+
70
+ branch_1_name = @branch_1.split('/').last
71
+ branch_2_name = @branch_2.split('/').last
72
+
73
+ @manager.compare branch_1_name, branch_2_name
74
+
75
+ end
76
+ end
data/test/test_helper.rb CHANGED
@@ -51,8 +51,6 @@ module Ojo
51
51
 
52
52
  im = "convert -size #{size_of_image} xc:white -fill white -stroke red #{shapes_string} #{image_destination}"
53
53
 
54
- #puts "\nim: #{im}"
55
-
56
54
  err = nil
57
55
  status = Open4::popen4(im) do |pid, stdin, stdout, stderr|
58
56
  err = stderr.read
@@ -61,6 +59,33 @@ module Ojo
61
59
  raise "generate image: #{err}" unless status.success?
62
60
  end
63
61
 
62
+ def make_some_real_files
63
+ file_1 = File.join(@branch_1, 'test_one.png')
64
+ file_2 = File.join(@branch_2, 'test_one.png')
65
+ generate_one_real_file file_1
66
+ generate_one_real_file file_2
67
+ end
68
+
69
+ def make_some_temp_files
70
+ @temp_diff_location = File.join(::Ojo.configuration.location, 'diff')
71
+ @temp_diff_filename = File.join(@temp_diff_location, 'some_test_diff.txt')
72
+ FileUtils.mkdir_p @temp_diff_location
73
+ File.open(@temp_diff_filename, 'w') { |f| f.write '' }
74
+
75
+ @filename_1 = File.join(@branch_1, 'some_test.txt')
76
+ @filename_2 = File.join(@branch_2, 'some_test.txt')
77
+ File.open(@filename_1, 'w') { |f| f.write '' }
78
+ File.open(@filename_2, 'w') { |f| f.write '' }
79
+ end
80
+
81
+ def generate_one_real_file(name)
82
+ shapes = []
83
+ shapes << "rectangle 20,0 190,190"
84
+ shapes << "rectangle 30,10 100,60"
85
+
86
+ generate_image_with_shapes(name, '200x200', shapes)
87
+ end
88
+
64
89
  def create_location_directories
65
90
  @location = File.absolute_path('../../tmp', __FILE__)
66
91
  @branch_1 = File.join(@location, 'branch_1')
@@ -72,6 +97,38 @@ module Ojo
72
97
  ::Ojo.configuration.location = @location
73
98
  end
74
99
 
100
+ def assert_compare_output(output_string, branch_names)
101
+ sa = output_string.split("\n")
102
+
103
+ assert_match 'Ojo v.', sa[1]
104
+ assert_match 'file location:', sa[2]
105
+ assert_match 'data sets compared:', sa[4]
106
+ assert_match 'File', sa[6]
107
+ assert_match 'Magnitude', sa[6]
108
+ assert_match "\e[1;32mtest_one.png\e[0m", sa[8]
109
+ assert_match "\e[1;32mP\e[0m", sa[8]
110
+ assert_match 'Results: All Same', sa[10]
111
+ assert_match 'Difference Files at', sa[11]
112
+ end
113
+
114
+ def assert_compare_output__missing_files(output_string, branch_names)
115
+ sa = output_string.split("\n")
116
+
117
+ assert_match 'Ojo v.', sa[1]
118
+ assert_match 'file location:', sa[2]
119
+ assert_match 'data sets compared:', sa[4]
120
+ assert_match 'File', sa[6]
121
+ assert_match 'Magnitude', sa[6]
122
+ # assert_match "\e[1;32mtest_one.png\e[0m", sa[8]
123
+ # assert_match "\e[1;32mP\e[0m", sa[8]
124
+ # assert_match "\e[1;34mtest_", sa[9]
125
+ # assert_match "\e[1;34m-\e[0m", sa[9]
126
+ # assert_match "\e[1;34mtest_", sa[10]
127
+ # assert_match "\e[1;34m-\e[0m", sa[10]
128
+ assert_match 'Results: All Same', sa[12]
129
+ assert_match 'Difference Files at', sa[13]
130
+ end
131
+
75
132
  def remove_location_directories
76
133
  FileUtils.rm_rf Dir[File.join(@location, '*')]
77
134
  end
@@ -84,6 +141,5 @@ module Ojo
84
141
  ensure
85
142
  $stdout = STDOUT
86
143
  end
87
-
88
144
  end
89
145
  end
@@ -36,12 +36,10 @@ class ComparisonTest < Ojo::OjoTestCase
36
36
  assert_equal @location, r[1][:location]
37
37
  assert_equal 'branch_1', r[1][:branch_1]
38
38
  assert_equal 'branch_2', r[1][:branch_2]
39
- assert_equal 1, r[1][:results].keys.count
40
- assert_equal File.basename(file_1), r[1][:results].keys.first
41
- assert_equal true, r[1][:results]['test_one.png'][:same]
42
- assert_equal file_1, r[1][:results]['test_one.png'][:file_1]
43
- assert_equal file_2, r[1][:results]['test_one.png'][:file_2]
44
-
39
+ assert_equal 1, r[1][:results].count
40
+ assert_equal true, r[1][:results].first[:same]
41
+ assert_equal file_1, r[1][:results].first[:file_1]
42
+ assert_equal file_2, r[1][:results].first[:file_2]
45
43
  end
46
44
 
47
45
  def test_comparison__single_file__different
@@ -69,11 +67,10 @@ class ComparisonTest < Ojo::OjoTestCase
69
67
  assert_equal @location, r[1][:location]
70
68
  assert_equal 'branch_1', r[1][:branch_1]
71
69
  assert_equal 'branch_2', r[1][:branch_2]
72
- assert_equal 1, r[1][:results].keys.count
73
- assert_equal File.basename(file_1), r[1][:results].keys.first
74
- assert_equal false, r[1][:results]['test_one.png'][:same]
75
- assert_equal file_1, r[1][:results]['test_one.png'][:file_1]
76
- assert_equal file_2, r[1][:results]['test_one.png'][:file_2]
70
+ assert_equal 1, r[1][:results].count
71
+ assert_equal false, r[1][:results].first[:same]
72
+ assert_equal file_1, r[1][:results].first[:file_1]
73
+ assert_equal file_2, r[1][:results].first[:file_2]
77
74
  end
78
75
 
79
76
  def test_comparison__single_file__different_size
@@ -98,11 +95,10 @@ class ComparisonTest < Ojo::OjoTestCase
98
95
  assert_equal @location, r[1][:location]
99
96
  assert_equal 'branch_1', r[1][:branch_1]
100
97
  assert_equal 'branch_2', r[1][:branch_2]
101
- assert_equal 1, r[1][:results].keys.count
102
- assert_equal File.basename(file_1), r[1][:results].keys.first
103
- assert_equal false, r[1][:results]['test_one.png'][:same]
104
- assert_equal file_1, r[1][:results]['test_one.png'][:file_1]
105
- assert_equal file_2, r[1][:results]['test_one.png'][:file_2]
98
+ assert_equal 1, r[1][:results].count
99
+ assert_equal false, r[1][:results].first[:same]
100
+ assert_equal file_1, r[1][:results].first[:file_1]
101
+ assert_equal file_2, r[1][:results].first[:file_2]
106
102
  end
107
103
 
108
104
  def test_comparison__multiple_files
@@ -130,7 +126,7 @@ class ComparisonTest < Ojo::OjoTestCase
130
126
  assert_equal @location, r[1][:location]
131
127
  assert_equal 'branch_1', r[1][:branch_1]
132
128
  assert_equal 'branch_2', r[1][:branch_2]
133
- assert_equal 3, r[1][:results].keys.count
129
+ assert_equal 3, r[1][:results].count
134
130
 
135
131
  file_1_4 = File.join(@branch_1, 'file_four.png')
136
132
  file_2_4 = File.join(@branch_2, 'file_four.png')
@@ -143,19 +139,22 @@ class ComparisonTest < Ojo::OjoTestCase
143
139
  assert_equal @location, r[1][:location]
144
140
  assert_equal 'branch_1', r[1][:branch_1]
145
141
  assert_equal 'branch_2', r[1][:branch_2]
146
- assert_equal 4, r[1][:results].keys.count
142
+ assert_equal 4, r[1][:results].count
143
+
144
+ files_tested = get_files_in_test(r[1][:results])
145
+
146
+ assert files_tested.include?(file_1_1)
147
+ assert files_tested.include?(file_1_2)
148
+ assert files_tested.include?(file_2_1)
149
+ assert files_tested.include?(file_2_3)
150
+ assert files_tested.include?(file_1_4)
151
+ assert files_tested.include?(file_2_4)
147
152
 
148
- assert r[1][:results].keys.include?(File.basename(file_1_1))
149
- assert r[1][:results].keys.include?(File.basename(file_1_2))
150
- assert r[1][:results].keys.include?(File.basename(file_2_1))
151
- assert r[1][:results].keys.include?(File.basename(file_2_3))
152
- assert r[1][:results].keys.include?(File.basename(file_1_4))
153
- assert r[1][:results].keys.include?(File.basename(file_2_4))
153
+ all_results = r[1][:results].map { |r| r[:same] }
154
154
 
155
- assert_equal true, r[1][:results][File.basename(file_1_1)][:same]
156
- assert_equal nil, r[1][:results][File.basename(file_1_2)][:same]
157
- assert_equal nil, r[1][:results][File.basename(file_2_3)][:same]
158
- assert_equal false, r[1][:results][File.basename(file_1_4)][:same]
155
+ assert_equal 1, all_results.count(false)
156
+ assert_equal 1, all_results.count(true)
157
+ assert_equal 2, all_results.count(nil)
159
158
 
160
159
  diff_location = File.join(Ojo.configuration.location, 'diff')
161
160
  assert_equal 1, Dir[File.join(diff_location, '*.png')].count
@@ -165,4 +164,11 @@ class ComparisonTest < Ojo::OjoTestCase
165
164
  assert File.exist?(File.join(diff_location, File.basename(file_1_4)))
166
165
  end
167
166
 
167
+ private
168
+
169
+ def get_files_in_test(results)
170
+ file_1_files = results.map { |result| result[:file_1] }
171
+ file_2_files = results.map { |result| result[:file_2] }
172
+ file_1_files + file_2_files
173
+ end
168
174
  end
@@ -10,20 +10,39 @@ class ImageMagicianTest < Ojo::OjoTestCase
10
10
  raw = raw_string('1', '22', '303', '4044')
11
11
  color_values = @image_magician.send(:get_color_values, raw)
12
12
 
13
- assert_equal '1', color_values[:red]
14
- assert_equal '22', color_values[:green]
15
- assert_equal '303', color_values[:blue]
13
+ assert_equal '1', color_values[:red]
14
+ assert_equal '22', color_values[:green]
15
+ assert_equal '303', color_values[:blue]
16
16
  assert_equal '4044', color_values[:all]
17
17
  end
18
18
 
19
19
  def test_unpack_comparison_result
20
20
  assert @image_magician.unpack_comparison_result(raw_string('0', '0', '0', '0')), 'all colors equal 0'
21
21
 
22
- refute @image_magician.unpack_comparison_result(raw_string('123', '234', '345', '456')), 'all colors greater than 0'
23
- refute @image_magician.unpack_comparison_result(raw_string('123', '0', '0', '0')), 'red greater than 0'
24
- refute @image_magician.unpack_comparison_result(raw_string('0', '234', '0', '0')), 'green greater than 0'
25
- refute @image_magician.unpack_comparison_result(raw_string('0', '0', '345', '0')), 'blue greater than 0'
26
- refute @image_magician.unpack_comparison_result(raw_string('0', '0', '0', '456')), "'all' greater than 0"
22
+ packed = raw_string('123', '234', '345', '456')
23
+ unpacked = @image_magician.unpack_comparison_result(packed)
24
+ refute unpacked[0], 'all colors greater than 0'
25
+ assert_equal 456, unpacked[1]
26
+
27
+ packed = raw_string('123', '0', '0', '0')
28
+ unpacked = @image_magician.unpack_comparison_result(packed)
29
+ refute unpacked[0], 'red greater than 0'
30
+ assert_equal 0, unpacked[1]
31
+
32
+ packed = raw_string('0', '234', '0', '0')
33
+ unpacked = @image_magician.unpack_comparison_result(packed)
34
+ refute unpacked[0], 'green greater than 0'
35
+ assert_equal 0, unpacked[1]
36
+
37
+ packed = raw_string('0', '0', '345', '0')
38
+ unpacked = @image_magician.unpack_comparison_result(packed)
39
+ refute unpacked[0], 'blue greater than 0'
40
+ assert_equal 0, unpacked[1]
41
+
42
+ packed = raw_string('0', '0', '0', '456')
43
+ unpacked = @image_magician.unpack_comparison_result(packed)
44
+ refute unpacked[0], "'all' greater than 0"
45
+ assert_equal 456, unpacked[1]
27
46
  end
28
47
 
29
48
  private
@@ -79,6 +79,29 @@ class ManagerTest < Ojo::OjoTestCase
79
79
  assert_compare_output out.string, %w(branch_1 branch_2)
80
80
  end
81
81
 
82
+ def test_compare_missing_files
83
+ make_some_real_files
84
+
85
+ filename = File.join(@branch_1, 'test_two.png')
86
+ generate_one_real_file filename
87
+ filename = File.join(@branch_2, 'test_three.png')
88
+ generate_one_real_file filename
89
+
90
+ Collimator::ProgressBar.stubs(:put_current_progress)
91
+ Collimator::ProgressBar.stubs(:complete)
92
+
93
+ branch_1_name = @branch_1.split('/').last
94
+ branch_2_name = @branch_2.split('/').last
95
+
96
+ out = capture_output do
97
+ Date.stub :today, Date.parse('1/10/2014') do
98
+ @manager.compare branch_1_name, branch_2_name
99
+ end
100
+ end
101
+
102
+ assert_compare_output__missing_files out.string, %w(branch_1 branch_2)
103
+ end
104
+
82
105
  def test_compare__missing_branch_names
83
106
  make_some_real_files
84
107
  Collimator::ProgressBar.stubs(:put_current_progress)
@@ -123,48 +146,6 @@ class ManagerTest < Ojo::OjoTestCase
123
146
 
124
147
  private
125
148
 
126
- def assert_compare_output(output_string, branch_names)
127
- sa = output_string.split("\n")
128
-
129
- assert_equal '+-----------------------------------------------------------------------------------------------------------------------------------------+', sa[0]
130
- assert_match 'Ojo v.', sa[1]
131
- assert_match 'file location:', sa[2]
132
- assert_equal '| 10/01/2014 |', sa[3]
133
- assert_equal '+-----------------------------------------------------------------------------------------------------------------------------------------+', sa[4]
134
- assert_match branch_names.first, sa[5]
135
- assert_match branch_names.last, sa[5]
136
- assert_equal '|--------------------------------------------------------------+--------------------------------------------------------------+-----------|', sa[6]
137
- assert_equal "| \e[1;32mtest_one.png\e[0m | \e[1;32mtest_one.png\e[0m | \e[1;32mPASS\e[0m |", sa[7]
138
- assert_equal '+-----------------------------------------------------------------------------------------------------------------------------------------+', sa[8]
139
- assert_equal '| Results: All Same |', sa[9]
140
- assert_match 'Difference Files at', sa[10]
141
- assert_equal '+-----------------------------------------------------------------------------------------------------------------------------------------+', sa[11]
142
- end
143
-
144
- def make_some_real_files
145
- file_1 = File.join(@branch_1, 'test_one.png')
146
- file_2 = File.join(@branch_2, 'test_one.png')
147
- generate_one_real_file file_1
148
- generate_one_real_file file_2
149
- end
150
-
151
- def generate_one_real_file(name)
152
- shapes = []
153
- shapes << "rectangle 20,0 190,190"
154
- shapes << "rectangle 30,10 100,60"
155
149
 
156
- generate_image_with_shapes(name, '200x200', shapes)
157
- end
158
-
159
- def make_some_temp_files
160
- @temp_diff_location = File.join(Ojo.configuration.location, 'diff')
161
- @temp_diff_filename = File.join(@temp_diff_location, 'some_test_diff.txt')
162
- FileUtils.mkdir_p @temp_diff_location
163
- File.open(@temp_diff_filename, 'w') { |f| f.write '' }
164
150
 
165
- @filename_1 = File.join(@branch_1, 'some_test.txt')
166
- @filename_2 = File.join(@branch_2, 'some_test.txt')
167
- File.open(@filename_1, 'w') { |f| f.write '' }
168
- File.open(@filename_2, 'w') { |f| f.write '' }
169
- end
170
151
  end
@@ -3,7 +3,7 @@ require_relative '../test_helper'
3
3
  class OutputTest < Ojo::OjoTestCase
4
4
 
5
5
  def test_not_too_long
6
- s = ::Ojo::Output.new.send(:make_printable_name, 'Geordie', 10)
6
+ s = ::Ojo::Output.new(24).send(:make_printable_name, 'Geordie', 10)
7
7
  assert_equal 7, s.length
8
8
  assert_equal 'Geordie', s
9
9
  end
@@ -11,28 +11,28 @@ class OutputTest < Ojo::OjoTestCase
11
11
  def test_too_long_filename__even_max_odd_string
12
12
  max_length = 10
13
13
  starting_string = 'SomeOddNumberOfCharactersInThisString'
14
- s = ::Ojo::Output.new.send(:make_printable_name, starting_string, max_length)
14
+ s = ::Ojo::Output.new(24).send(:make_printable_name, starting_string, max_length)
15
15
  assert_equal 'Som....ing', s
16
16
  end
17
17
 
18
18
  def test_too_long_filename__even_max_even_string
19
19
  max_length = 10
20
20
  starting_string = 'SomeEvenNumberOfCharactersInThisString'
21
- s = ::Ojo::Output.new.send(:make_printable_name, starting_string, max_length)
21
+ s = ::Ojo::Output.new(24).send(:make_printable_name, starting_string, max_length)
22
22
  assert_equal 'Som....ng', s
23
23
  end
24
24
 
25
25
  def test_too_long_filename__odd_max_odd_string
26
26
  max_length = 11
27
27
  starting_string = 'SomeOddNumberOfCharactersInThisString'
28
- s = ::Ojo::Output.new.send(:make_printable_name, starting_string, max_length)
28
+ s = ::Ojo::Output.new(24).send(:make_printable_name, starting_string, max_length)
29
29
  assert_equal 'Som....ing', s
30
30
  end
31
31
 
32
32
  def test_too_long_filename__odd_max_even_string
33
33
  max_length = 11
34
34
  starting_string = 'SomeEvenNumberOfCharactersInThisString'
35
- s = ::Ojo::Output.new.send(:make_printable_name, starting_string, max_length)
35
+ s = ::Ojo::Output.new(24).send(:make_printable_name, starting_string, max_length)
36
36
  assert_equal 'Some....ing', s
37
37
  end
38
38
  end
@@ -0,0 +1,30 @@
1
+ require_relative '../test_helper'
2
+
3
+ class SorterTest < Ojo::OjoTestCase
4
+
5
+ def test_sort_results
6
+ results = {:results => [
7
+ { :same => true, :file_1 => 'full_1/file_1', :file_2 => 'full_1/file_2', :not_same_pixel_count => 0 },
8
+ { :same => false, :file_1 => 'full_2/file_1', :file_2 => 'full_2/file_2', :not_same_pixel_count => 31 },
9
+ { :same => false, :file_1 => 'full_3/file_1', :file_2 => 'full_3/file_2', :not_same_pixel_count => 12 },
10
+ { :same => false, :file_1 => 'full_4/file_1', :file_2 => 'full_4/file_2', :not_same_pixel_count => 55 },
11
+ { :same => true, :file_1 => 'full_5/file_1', :file_2 => 'full_5/file_2', :not_same_pixel_count => 0 },
12
+ { :same => false, :file_1 => 'full_6/file_1', :file_2 => 'full_6/file_2', :not_same_pixel_count => 33 },
13
+ { :same => false, :file_1 => 'full_7/file_1', :file_2 => 'full_7/file_2', :not_same_pixel_count => 100 },
14
+ { :same => true, :file_1 => 'full_8/file_1', :file_2 => 'full_8/file_2', :not_same_pixel_count => 0 },
15
+ { :same => false, :file_1 => 'full_9/file_1', :file_2 => 'full_9/file_2', :not_same_pixel_count => 63 }
16
+ ]
17
+ }
18
+
19
+ expected_sorted_order = %w(full_7 full_9 full_4 full_6 full_2 full_3)
20
+
21
+ sorter = ::Ojo::Sorter.new(results, 24)
22
+ sorted_results = sorter.sort
23
+
24
+ assert_equal results[:results].count, sorted_results.count
25
+
26
+ expected_sorted_order.each_with_index do |file, i|
27
+ assert_match file, sorted_results[i][:file_1]
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ojo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - geordie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-27 00:00:00.000000000 Z
11
+ date: 2015-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -91,9 +91,11 @@ files:
91
91
  - lib/ojo/output.rb
92
92
  - lib/ojo/rails/engine.rb
93
93
  - lib/ojo/screenshot.rb
94
+ - lib/ojo/sorter.rb
94
95
  - lib/ojo/version.rb
95
96
  - lib/tasks/ojo.rake
96
97
  - ojo.gemspec
98
+ - test/demo/demo_test.rb
97
99
  - test/page_objects.rb
98
100
  - test/page_objects/test_app/index_page.rb
99
101
  - test/page_objects/test_app/test_app_page.rb
@@ -119,6 +121,7 @@ files:
119
121
  - test/unit/image_magician_test.rb
120
122
  - test/unit/manager_test.rb
121
123
  - test/unit/output_test.rb
124
+ - test/unit/sorter_test.rb
122
125
  homepage: ''
123
126
  licenses:
124
127
  - MIT
@@ -144,6 +147,7 @@ signing_key:
144
147
  specification_version: 4
145
148
  summary: ojo is the eyes of the appearance test
146
149
  test_files:
150
+ - test/demo/demo_test.rb
147
151
  - test/page_objects.rb
148
152
  - test/page_objects/test_app/index_page.rb
149
153
  - test/page_objects/test_app/test_app_page.rb
@@ -169,3 +173,4 @@ test_files:
169
173
  - test/unit/image_magician_test.rb
170
174
  - test/unit/manager_test.rb
171
175
  - test/unit/output_test.rb
176
+ - test/unit/sorter_test.rb