windows 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'windows/project'
3
+
4
+ describe Windows::Project do
5
+ subject { Windows::Project.new(name, path) }
6
+ let(:name) { :my_project }
7
+ let(:path) { 'path/to/project' }
8
+ let(:editor) { 'bin/my_editor' }
9
+ let(:browser){ 'bin/my_browser' }
10
+ let(:args) { {foo: 'bar', hello: 'world'} }
11
+ let(:command){ 'any_command' }
12
+
13
+ context "options" do
14
+ it 'return root as pathname' do
15
+ subject.root.should == Pathname.new(path).expand_path
16
+ end
17
+
18
+ it 'return name' do
19
+ subject.name.should == name
20
+ end
21
+ end
22
+
23
+ it '#close' do
24
+ window1 = Object.new
25
+ window2 = Object.new
26
+ subject.stub(:windows).and_return([window1, window2])
27
+ window1.should_receive(:close)
28
+ window2.should_receive(:close)
29
+ subject.close
30
+ end
31
+
32
+ context '#open_window' do
33
+ before do
34
+ @window = stub_window
35
+ end
36
+
37
+ it 'should create window' do
38
+ @window.should_receive(:create)
39
+ subject.open_window(command, args)
40
+ end
41
+
42
+ it 'with block should yield window' do
43
+ @window.should_receive(:focus)
44
+
45
+ subject.open_window(command, args) do |w|
46
+ w.focus
47
+ end
48
+ end
49
+
50
+ it 'should store created window' do
51
+ subject.open_window(command, args)
52
+ subject.windows.should include(@window)
53
+ end
54
+ end
55
+
56
+ context "#default_terminal" do
57
+ it 'should return active window' do
58
+ subject.should_receive(:open_window).with(Windows::ActiveWindowKey)
59
+ subject.default_terminal
60
+ end
61
+ end
62
+
63
+ def stub_window
64
+ window = double("Window").as_null_object
65
+ Windows::Window.should_receive(:new).with(command, args).and_return(window)
66
+ window
67
+ end
68
+ end
@@ -0,0 +1,23 @@
1
+ require 'pry'
2
+ # This file was generated by the `rspec --init` command. Conventionally, all
3
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
4
+ # Require this file using `require "spec_helper"` to ensure that it is only
5
+ # loaded once.
6
+ #
7
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
8
+
9
+
10
+ # support files
11
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
12
+
13
+ RSpec.configure do |config|
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.run_all_when_everything_filtered = true
16
+ config.filter_run :focus
17
+
18
+ # Run specs in random order to surface order dependencies. If you find an
19
+ # order dependency and want to debug it, you can fix the order by providing
20
+ # the seed, which is printed after each run.
21
+ # --seed 1234
22
+ config.order = 'random'
23
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'windows/structures/collection'
3
+
4
+ class DummyStruct < Struct.new(:id)
5
+ end
6
+
7
+ describe Windows::Structures::Collection do
8
+ let(:klass) { Windows::Structures::Collection }
9
+
10
+ let(:collection_a) { klass.new [DummyStruct.new(1), DummyStruct.new(2)] }
11
+ let(:collection_b) { klass.new collection_a.clone.push(DummyStruct.new(3)) }
12
+ let(:collection_c) { klass.new collection_b.clone.push(DummyStruct.new(4)) }
13
+
14
+ context "#-" do
15
+ it 'bigger - smaller' do
16
+ (collection_b - collection_a).should == collection_b[-1]
17
+ end
18
+
19
+ it 'smaller - bigger' do
20
+ (collection_a - collection_b).should == nil
21
+ end
22
+
23
+ it 'bigger - smaller by more than one' do
24
+ expect { collection_c - collection_a}.to raise_error "I don't know which item is correct [3, 4]"
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ require 'windows/structures/desktop'
3
+
4
+ describe Windows::Structures::Desktop do
5
+ subject { Windows::Structures::Desktop.new(id,geometry) }
6
+ let(:id) { 1 }
7
+ let(:geometry) { [10, 20, 800,600] }
8
+
9
+ its(:width) { should == 800 }
10
+ its(:height) { should == 600 }
11
+ its(:x_offset) { should == 10 }
12
+ its(:y_offset) { should == 20 }
13
+ end
@@ -0,0 +1,40 @@
1
+ # RSpec matcher to spec delegations.
2
+ #
3
+ # Usage:
4
+ #
5
+ # describe Post do
6
+ # it { should delegate(:name).to(:author).with_prefix }
7
+ # it { should delegate(:month).to(:created_at) }
8
+ # it { should delegate(:year).to(:created_at) }
9
+ # end
10
+
11
+ RSpec::Matchers.define :delegate do |method|
12
+ match do |delegator|
13
+ @method = @prefix ? :"#{@to}_#{method}" : method
14
+ @delegator = delegator
15
+ begin
16
+ @delegator.send(@to)
17
+ rescue NoMethodError
18
+ raise "#{@delegator} does not respond to #{@to}!"
19
+ end
20
+ @delegator.stub(@to).and_return double('receiver')
21
+ @delegator.send(@to).stub(method).and_return :called
22
+ @delegator.send(@method) == :called
23
+ end
24
+
25
+ description do
26
+ "delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
27
+ end
28
+
29
+ failure_message_for_should do |text|
30
+ "expected #{@delegator} to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
31
+ end
32
+
33
+ failure_message_for_should_not do |text|
34
+ "expected #{@delegator} not to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
35
+ end
36
+
37
+ chain(:to) { |receiver| @to = receiver }
38
+ chain(:with_prefix) { @prefix = true }
39
+
40
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+ require 'windows/units/unit_converter'
3
+
4
+ describe Windows::Units::Converter::Finder do
5
+ let(:el) { 1000 }
6
+ let(:supported_formats) { [:percent, :pixel] }
7
+ subject { Windows::Units::Converter::Finder.new(el) }
8
+
9
+ it '#to(:percent, base)' do
10
+ format = :percent
11
+ subject.to(format, base: 25).should == 250
12
+ end
13
+
14
+ it '#to(:pixel)' do
15
+ format = :pixel
16
+ subject.to(format).should == 1000
17
+ end
18
+
19
+ it '#to(:nil || false)' do
20
+ format = nil
21
+ expect { subject.to(format) }.to raise_error "I only support this formats #{supported_formats}"
22
+ end
23
+
24
+ end
25
+
26
+ describe Windows::Units::UnitConverter do
27
+ let(:desktop_geometry) { [0, 0, 800, 600] }
28
+ let(:desktop) { Struct.new(:x_offset, :y_offset, :width, :height).new(*desktop_geometry) }
29
+ subject { Windows::Units::UnitConverter.new(desktop, *args) }
30
+
31
+ it 'NAMED_GEOMETRY' do
32
+ expected_values = {
33
+ left: [0, 0, '50%', '100%'],
34
+ right: ['50%', 0, '50%', '100%'],
35
+ bottom: [0, '50%', '100%', '50%'],
36
+ top: [0, 0, '100%', '50%'],
37
+ max: [0, 0, '100%', '100%'],
38
+ bottom_right: ['50%', '50%', '50%', '50%'],
39
+ bottom_left: [0, '50%', '50%', '50%'],
40
+ top_right: ['50%', 0, '50%', '50%'],
41
+ top_left: [0, 0, '50%', '50%']
42
+ }
43
+ Windows::Units::UnitConverter::NAMED_GEOMETRY.should == expected_values
44
+ end
45
+
46
+ describe "#convert" do
47
+ context "pixels" do
48
+ let(:args) { [0, 0, 50, 100] }
49
+ its(:convert) { should == [0, 0, 50, 100] }
50
+ end
51
+
52
+ context "percents" do
53
+ let(:args) { ['0%','0%','50%','100%'] }
54
+ its(:convert) { should == [0, 0 , 400, 600] }
55
+ end
56
+
57
+ context "mixed units" do
58
+ let(:args) { ['50%', 0, '100%', 25] }
59
+ its(:convert) { should == [400, 0, 800, 25] }
60
+ end
61
+
62
+ context "named units" do
63
+ let(:args) { 'left' }
64
+ its(:convert) { should == [0, 0, 400, 600] }
65
+
66
+ it 'wrong name' do
67
+ expect{ subject.class.new(desktop, 'wrong_name') }.to raise_error /Geometry with name wrong_name not exist. You can use/
68
+ end
69
+ end
70
+
71
+ context "with offset" do
72
+ let(:desktop_geometry) { [10,20, 800, 600] }
73
+ let(:args) { 'right' }
74
+
75
+ its(:convert) { should == [410, 20, 400, 600] }
76
+ end
77
+
78
+ end
79
+ end
80
+
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+ require 'windows'
3
+
4
+ describe Windows::Window do
5
+ subject { Windows::Window.new('chromium-browser') }
6
+
7
+ it { should respond_to :id, :title, :desktop, :x, :y, :width, :height }
8
+ it { should respond_to :move, :close, :focus, :undock, :create, :window, :on_top, :not_on_top}
9
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/windows/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["lefty313"]
6
+ gem.email = ["lewy313@gmail.com"]
7
+ # gem.description = %q{TODO: Write a gem description}
8
+ gem.summary = %q{Manage operating system windows}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "windows"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Windows::VERSION
17
+
18
+ gem.add_runtime_dependency "ruby-wmctrl"
19
+
20
+ gem.add_development_dependency "rspec"
21
+ gem.add_development_dependency "pry"
22
+ gem.add_development_dependency "libnotify"
23
+ gem.add_development_dependency "guard-rspec"
24
+ gem.add_development_dependency "simplecov"
25
+ gem.add_development_dependency "fuubar"
26
+ gem.add_development_dependency 'rb-inotify', '~> 0.8.8'
27
+ end
metadata ADDED
@@ -0,0 +1,219 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: windows
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - lefty313
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ruby-wmctrl
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: pry
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: libnotify
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard-rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: simplecov
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: fuubar
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rb-inotify
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 0.8.8
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 0.8.8
142
+ description:
143
+ email:
144
+ - lewy313@gmail.com
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - .gitignore
150
+ - .rspec
151
+ - Gemfile
152
+ - Gemfile.lock
153
+ - Guardfile
154
+ - LICENSE
155
+ - README.md
156
+ - Rakefile
157
+ - lib/windows.rb
158
+ - lib/windows/core_ext/numeric.rb
159
+ - lib/windows/engines/wmctrl.rb
160
+ - lib/windows/engines/xwindow.rb
161
+ - lib/windows/project.rb
162
+ - lib/windows/structures.rb
163
+ - lib/windows/structures/collection.rb
164
+ - lib/windows/structures/desktop.rb
165
+ - lib/windows/structures/geometry.rb
166
+ - lib/windows/structures/window.rb
167
+ - lib/windows/units/converter.rb
168
+ - lib/windows/units/recognizer.rb
169
+ - lib/windows/units/unit_converter.rb
170
+ - lib/windows/version.rb
171
+ - samples/moving_windows.rb
172
+ - samples/project.rb
173
+ - spec/core_ext/numeric.rb
174
+ - spec/engines/wmctrl_spec.rb
175
+ - spec/engines/xwindow_spec.rb
176
+ - spec/project_spec.rb
177
+ - spec/spec_helper.rb
178
+ - spec/structures/collection_spec.rb
179
+ - spec/structures/desktop_spec.rb
180
+ - spec/support/matchers/delegate.rb
181
+ - spec/unit_converter_spec.rb
182
+ - spec/window_spec.rb
183
+ - windows.gemspec
184
+ homepage: ''
185
+ licenses: []
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ none: false
192
+ requirements:
193
+ - - ! '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
199
+ - - ! '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 1.8.24
205
+ signing_key:
206
+ specification_version: 3
207
+ summary: Manage operating system windows
208
+ test_files:
209
+ - spec/core_ext/numeric.rb
210
+ - spec/engines/wmctrl_spec.rb
211
+ - spec/engines/xwindow_spec.rb
212
+ - spec/project_spec.rb
213
+ - spec/spec_helper.rb
214
+ - spec/structures/collection_spec.rb
215
+ - spec/structures/desktop_spec.rb
216
+ - spec/support/matchers/delegate.rb
217
+ - spec/unit_converter_spec.rb
218
+ - spec/window_spec.rb
219
+ has_rdoc: