likadan 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ba7c704150fa0176ec40681e44e1b605cd5dff34
4
+ data.tar.gz: 9ecd0dc4806257c91574b12e1d336b3c82ab60ce
5
+ SHA512:
6
+ metadata.gz: 6862ffbbcf213a66b4c6ccc24142880ce6646f91885451eb647035558a3e1a1212e7b9f2cb2a2701fe02b1eb1b5383838d19fe104edabe71a73e3aa6276a6986
7
+ data.tar.gz: 2a77b00434e19e1e82094899338c3ca2ae372ae47eeab3cc28fd9d7efb7939734f299dd3d8cea9845907085eff712d8de3a3553b074e3ddaa0d9782d1c65caf3
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Thread.new do # trivial example work thread
4
+ begin
5
+ require 'likadan_runner'
6
+ ensure
7
+ exit
8
+ end
9
+ end
10
+
11
+ require 'likadan_server'
12
+
@@ -0,0 +1,58 @@
1
+ require 'selenium-webdriver'
2
+ require 'diffux_core/snapshot_comparer'
3
+ require 'diffux_core/snapshot_comparison_image/base'
4
+ require 'diffux_core/snapshot_comparison_image/gutter'
5
+ require 'diffux_core/snapshot_comparison_image/before'
6
+ require 'diffux_core/snapshot_comparison_image/overlayed'
7
+ require 'diffux_core/snapshot_comparison_image/after'
8
+ require 'chunky_png'
9
+ require 'yaml'
10
+
11
+ driver = Selenium::WebDriver.for :firefox
12
+ begin
13
+ config = YAML.load_file('.likadan.yaml')
14
+ snapshots_folder = config['snapshots_folder'] || './snapshots'
15
+
16
+ driver.navigate.to 'http://localhost:4567/'
17
+
18
+ while current = driver.execute_script('return window.likadan.next()') do
19
+ now = Time.now.to_i
20
+ normalized_name = current['name'].gsub(/[^a-zA-Z0-9\-_]/, '_')
21
+ file = "#{snapshots_folder}/#{normalized_name}/snapshot_#{now}.png"
22
+ dirname = File.dirname(file)
23
+ unless File.directory?(dirname)
24
+ FileUtils.mkdir_p(dirname)
25
+ end
26
+
27
+ previous_png = Dir.glob(File.join(dirname, 'snapshot_*.png')).max do |a,b|
28
+ File.ctime(a) <=> File.ctime(b)
29
+ end
30
+
31
+ driver.save_screenshot(file)
32
+ to_crop = ChunkyPNG::Image.from_file(file)
33
+ to_crop.crop!(0, 0, current['width'], current['height'])
34
+ to_crop.save(file)
35
+
36
+ print "Checking \"#{current['name']}\"... "
37
+
38
+ if previous_png
39
+ comparison = Diffux::SnapshotComparer.new(
40
+ ChunkyPNG::Image.from_file(previous_png),
41
+ ChunkyPNG::Image.from_file(file),
42
+ ).compare!
43
+
44
+ if img = comparison[:diff_image]
45
+ diff_output = File.join(dirname, "diff_#{now}.png")
46
+ img.save(diff_output)
47
+ puts "#{comparison[:diff_in_percent]}% (#{diff_output})"
48
+ else
49
+ puts 'No diff.'
50
+ end
51
+ else
52
+ puts "First snapshot created (#{file})"
53
+ end
54
+ end
55
+ ensure
56
+ driver.quit
57
+ end
58
+
@@ -0,0 +1,38 @@
1
+ require 'sinatra/base'
2
+ require 'yaml'
3
+
4
+ def get_configuration
5
+ config = {
6
+ 'source_files' => [],
7
+ 'stylesheets' => [],
8
+ 'port' => 4567
9
+ }
10
+ config_file = '.likadan.yaml'
11
+ if File.exist? config_file
12
+ config = config.merge(YAML.load_file(config_file))
13
+ end
14
+ config
15
+ end
16
+
17
+ class LikadanServer < Sinatra::Base
18
+ configure do
19
+ enable :static
20
+ set :port, get_configuration['port']
21
+ end
22
+
23
+ get '/' do
24
+ @config = get_configuration
25
+ erb :index
26
+ end
27
+
28
+ get '/resource' do
29
+ file = params[:file]
30
+ if file.start_with? 'http'
31
+ redirect file
32
+ else
33
+ send_file file
34
+ end
35
+ end
36
+
37
+ run!
38
+ end
@@ -0,0 +1,28 @@
1
+ window.likadan = {
2
+ defined: [],
3
+
4
+ define: function(name, func) {
5
+ this.defined.push({
6
+ name: name,
7
+ func: func
8
+ });
9
+ },
10
+
11
+ next: function() {
12
+ var next = this.defined.shift();
13
+ if (!next) {
14
+ return;
15
+ }
16
+ var out = document.getElementById('likadan-output');
17
+ out.innerHTML = '';
18
+ next.func(out);
19
+
20
+ var elem = out.firstChild;
21
+
22
+ return {
23
+ name: next.name,
24
+ width: elem.offsetWidth,
25
+ height: elem.offsetHeight
26
+ };
27
+ }
28
+ };
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <% @config['stylesheets'].each do |stylesheet| %>
5
+ <link rel="stylesheet" type="text/css"
6
+ href="/resource?file=<%= ERB::Util.url_encode(stylesheet) %>">
7
+ <% end %>
8
+ </head>
9
+ <body style="margin: 0;">
10
+ <div id="likadan-output"/>
11
+ <script src="/likadan-runner.js"></script>
12
+ <% @config['source_files'].each do |source_file| %>
13
+ <script src="/resource?file=<%= ERB::Util.url_encode(source_file) %>"></script>
14
+ <% end %>
15
+ </body>
16
+ </html>
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: likadan
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Henric Trotzig
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: diffux-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.0.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: chunky_png
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.3'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.3.4
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.3.4
53
+ - !ruby/object:Gem::Dependency
54
+ name: selenium-webdriver
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.44'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.44.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.44'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.44.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: thin
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.6'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.3
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.6'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.6.3
93
+ - !ruby/object:Gem::Dependency
94
+ name: sinatra
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.4'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.4.5
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.4'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.4.5
113
+ description: Likadan, a perceptual diff tool for JS components
114
+ email: henric.trotzig@gmail.com
115
+ executables:
116
+ - likadan
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - bin/likadan
121
+ - lib/likadan_runner.rb
122
+ - lib/likadan_server.rb
123
+ - lib/public/likadan-runner.js
124
+ - lib/views/index.erb
125
+ homepage: http://rubygems.org/gems/likadan
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.2.2
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: Likadan
149
+ test_files: []
150
+ has_rdoc: