windows 0.0.1

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.
@@ -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: