observr 1.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.
- checksums.yaml +15 -0
- data/.gitignore +6 -0
- data/History.txt +32 -0
- data/LICENSE +19 -0
- data/README.md +119 -0
- data/Rakefile +34 -0
- data/TODO.md +31 -0
- data/bin/observr +105 -0
- data/contributions.txt +7 -0
- data/docs.observr +26 -0
- data/gem.observr +22 -0
- data/lib/observr.rb +133 -0
- data/lib/observr/controller.rb +87 -0
- data/lib/observr/event_handlers/base.rb +57 -0
- data/lib/observr/event_handlers/darwin.rb +160 -0
- data/lib/observr/event_handlers/portable.rb +75 -0
- data/lib/observr/event_handlers/unix.rb +125 -0
- data/lib/observr/script.rb +257 -0
- data/observr.gemspec +21 -0
- data/specs.watchr +37 -0
- data/test/README +11 -0
- data/test/event_handlers/test_base.rb +24 -0
- data/test/event_handlers/test_darwin.rb +111 -0
- data/test/event_handlers/test_portable.rb +142 -0
- data/test/event_handlers/test_unix.rb +162 -0
- data/test/test_controller.rb +121 -0
- data/test/test_helper.rb +37 -0
- data/test/test_script.rb +163 -0
- data/test/test_watchr.rb +76 -0
- metadata +114 -0
data/test/test_script.rb
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'test/test_helper'
|
2
|
+
|
3
|
+
class TestScript < MiniTest::Unit::TestCase
|
4
|
+
include Observr
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@script = Script.new
|
8
|
+
end
|
9
|
+
|
10
|
+
## external api
|
11
|
+
|
12
|
+
test "watch" do
|
13
|
+
@script.ec.watch('pattern')
|
14
|
+
@script.ec.watch('pattern', :event_type)
|
15
|
+
@script.ec.watch('pattern') { nil }
|
16
|
+
end
|
17
|
+
|
18
|
+
test "default action" do
|
19
|
+
@script.ec.default_action { nil }
|
20
|
+
end
|
21
|
+
|
22
|
+
test "reload" do
|
23
|
+
@script.ec.reload
|
24
|
+
end
|
25
|
+
|
26
|
+
test "eval context delegates methods to script" do
|
27
|
+
@script.ec.watch('pattern')
|
28
|
+
@script.ec.watch('pattern', :event_type)
|
29
|
+
@script.ec.watch('pattern') { nil }
|
30
|
+
@script.ec.default_action { :foo }
|
31
|
+
|
32
|
+
assert_equal 3, @script.rules.size
|
33
|
+
assert_equal :foo, @script.default_action.call
|
34
|
+
end
|
35
|
+
|
36
|
+
## functionality
|
37
|
+
|
38
|
+
test "rule object" do
|
39
|
+
rule = @script.watch('pattern', :modified) { nil }
|
40
|
+
|
41
|
+
assert_equal 'pattern', rule.pattern
|
42
|
+
assert_equal :modified, rule.event_type
|
43
|
+
assert_equal nil, rule.action.call
|
44
|
+
end
|
45
|
+
|
46
|
+
test "default event type" do
|
47
|
+
rule = @script.watch('pattern') { nil }
|
48
|
+
assert_equal :modified, rule.event_type
|
49
|
+
end
|
50
|
+
|
51
|
+
test "finds action for path" do
|
52
|
+
@script.watch('abc') { :x }
|
53
|
+
@script.watch('def') { :y }
|
54
|
+
assert_equal :x, @script.action_for('abc').call
|
55
|
+
end
|
56
|
+
|
57
|
+
test "finds action for path with event type" do
|
58
|
+
@script.watch('abc', :accessed) { :x }
|
59
|
+
@script.watch('abc', :modified) { :y }
|
60
|
+
assert_equal :x, @script.action_for('abc', :accessed).call
|
61
|
+
end
|
62
|
+
|
63
|
+
test "finds action for path with any event type" do
|
64
|
+
@script.watch('abc', nil) { :x }
|
65
|
+
@script.watch('abc', :modified) { :y }
|
66
|
+
assert_equal :x, @script.action_for('abc', :accessed).call
|
67
|
+
end
|
68
|
+
|
69
|
+
test "no action for path" do
|
70
|
+
@script.watch('abc', :accessed) { :x }
|
71
|
+
assert_nil @script.action_for('abc', :modified).call
|
72
|
+
end
|
73
|
+
|
74
|
+
test "collects patterns" do
|
75
|
+
@script.watch('abc')
|
76
|
+
@script.watch('def')
|
77
|
+
assert_includes @script.patterns, 'abc'
|
78
|
+
assert_includes @script.patterns, 'def'
|
79
|
+
end
|
80
|
+
|
81
|
+
test "parses script file" do
|
82
|
+
path = Pathname( Tempfile.open('bar').path )
|
83
|
+
path.open('w') {|f| f.write <<-STR }
|
84
|
+
watch( 'abc' ) { :x }
|
85
|
+
STR
|
86
|
+
script = Script.new(path)
|
87
|
+
script.parse!
|
88
|
+
assert_equal :x, script.action_for('abc').call
|
89
|
+
end
|
90
|
+
|
91
|
+
test "__FILE__ is set properly in script file" do
|
92
|
+
path = Pathname( Tempfile.open('bar').path )
|
93
|
+
path.open('w') {|f| f.write <<-STR }
|
94
|
+
throw __FILE__.to_sym
|
95
|
+
STR
|
96
|
+
script = Script.new(path)
|
97
|
+
assert_throws(path.to_s.to_sym) { script.parse! }
|
98
|
+
end
|
99
|
+
|
100
|
+
test "reloads script file" do
|
101
|
+
@script.expects(:parse!)
|
102
|
+
@script.ec.reload
|
103
|
+
end
|
104
|
+
|
105
|
+
test "skips parsing on nil script file" do
|
106
|
+
script = Script.new
|
107
|
+
script.ec.stubs(:instance_eval).raises(Exception) #negative expectation hack
|
108
|
+
script.parse!
|
109
|
+
end
|
110
|
+
|
111
|
+
test "resets state" do
|
112
|
+
@script.default_action { 'x' }
|
113
|
+
@script.watch('foo') { 'bar' }
|
114
|
+
@script.reset
|
115
|
+
assert_nil @script.default_action.call
|
116
|
+
assert_equal [], @script.rules
|
117
|
+
end
|
118
|
+
|
119
|
+
test "resets state on parse" do
|
120
|
+
script = Script.new( Pathname( Tempfile.new('foo').path ) )
|
121
|
+
script.stubs(:instance_eval)
|
122
|
+
script.expects(:reset)
|
123
|
+
script.parse!
|
124
|
+
end
|
125
|
+
|
126
|
+
test "actions receive a MatchData object" do
|
127
|
+
@script.watch('de(.)') {|m| [m[0], m[1]] }
|
128
|
+
assert_equal %w( def f ), @script.action_for('def').call
|
129
|
+
end
|
130
|
+
|
131
|
+
test "rule's default action" do
|
132
|
+
@script.watch('abc')
|
133
|
+
assert_nil @script.action_for('abc').call
|
134
|
+
|
135
|
+
@script.default_action { :x }
|
136
|
+
@script.watch('def')
|
137
|
+
assert_equal :x, @script.action_for('def').call
|
138
|
+
end
|
139
|
+
|
140
|
+
test "file path" do
|
141
|
+
Script.any_instance.stubs(:parse!)
|
142
|
+
path = Pathname('some/file').expand_path
|
143
|
+
script = Script.new(path)
|
144
|
+
assert_equal path, script.path
|
145
|
+
end
|
146
|
+
|
147
|
+
test "nil file path" do
|
148
|
+
script = Script.new
|
149
|
+
assert_nil script.path
|
150
|
+
end
|
151
|
+
|
152
|
+
test "later rules take precedence" do
|
153
|
+
@script.watch('a/(.*)\.x') { :x }
|
154
|
+
@script.watch('a/b/(.*)\.x') { :y }
|
155
|
+
assert_equal :y, @script.action_for('a/b/c.x').call
|
156
|
+
end
|
157
|
+
|
158
|
+
test "rule patterns match against paths relative to pwd" do
|
159
|
+
@script.watch('^abc') { :x }
|
160
|
+
path = Pathname(Dir.pwd) + 'abc'
|
161
|
+
assert_equal :x, @script.action_for(path).call
|
162
|
+
end
|
163
|
+
end
|
data/test/test_watchr.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'test/test_helper'
|
2
|
+
|
3
|
+
class TestObservr < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
Observr.options = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
## options
|
10
|
+
|
11
|
+
test "debug option" do
|
12
|
+
assert_equal false, Observr.options.debug
|
13
|
+
Observr.options.debug = true
|
14
|
+
assert_equal true, Observr.options.debug
|
15
|
+
end
|
16
|
+
|
17
|
+
## functionality
|
18
|
+
|
19
|
+
test "debug" do
|
20
|
+
assert_empty capture_io { Observr.debug('abc') }.first
|
21
|
+
Observr.options.debug = true
|
22
|
+
assert_equal "[observr debug] abc\n", capture_io { Observr.debug('abc') }.first
|
23
|
+
end
|
24
|
+
|
25
|
+
test "picking handler" do
|
26
|
+
|
27
|
+
if Observr::HAVE_REV
|
28
|
+
|
29
|
+
Observr.handler = nil
|
30
|
+
ENV['HANDLER'] = 'linux'
|
31
|
+
assert_equal Observr::EventHandler::Unix, Observr.handler
|
32
|
+
|
33
|
+
Observr.handler = nil
|
34
|
+
ENV['HANDLER'] = 'bsd'
|
35
|
+
assert_equal Observr::EventHandler::Unix, Observr.handler
|
36
|
+
|
37
|
+
Observr.handler = nil
|
38
|
+
ENV['HANDLER'] = 'unix'
|
39
|
+
assert_equal Observr::EventHandler::Unix, Observr.handler
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
if Observr::HAVE_FSE
|
44
|
+
|
45
|
+
Observr.handler = nil
|
46
|
+
ENV['HANDLER'] = 'darwin'
|
47
|
+
assert_equal Observr::EventHandler::Darwin, Observr.handler
|
48
|
+
|
49
|
+
Observr.handler = nil
|
50
|
+
ENV['HANDLER'] = 'osx'
|
51
|
+
assert_equal Observr::EventHandler::Darwin, Observr.handler
|
52
|
+
|
53
|
+
Observr.handler = nil
|
54
|
+
ENV['HANDLER'] = 'fsevent'
|
55
|
+
assert_equal Observr::EventHandler::Darwin, Observr.handler
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
Observr.handler = nil
|
60
|
+
ENV['HANDLER'] = 'mswin'
|
61
|
+
assert_equal Observr::EventHandler::Portable, Observr.handler
|
62
|
+
|
63
|
+
Observr.handler = nil
|
64
|
+
ENV['HANDLER'] = 'cygwin'
|
65
|
+
assert_equal Observr::EventHandler::Portable, Observr.handler
|
66
|
+
|
67
|
+
Observr.handler = nil
|
68
|
+
ENV['HANDLER'] = 'portable'
|
69
|
+
assert_equal Observr::EventHandler::Portable, Observr.handler
|
70
|
+
|
71
|
+
Observr.handler = nil
|
72
|
+
ENV['HANDLER'] = 'other'
|
73
|
+
assert_equal Observr::EventHandler::Portable, Observr.handler
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: observr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- mynyml
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-02-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mocha
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: every
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Modern continuous testing (flexible alternative to autotest).
|
56
|
+
email: mynyml@gmail.com
|
57
|
+
executables:
|
58
|
+
- observr
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- History.txt
|
64
|
+
- LICENSE
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- TODO.md
|
68
|
+
- bin/observr
|
69
|
+
- contributions.txt
|
70
|
+
- docs.observr
|
71
|
+
- gem.observr
|
72
|
+
- lib/observr.rb
|
73
|
+
- lib/observr/controller.rb
|
74
|
+
- lib/observr/event_handlers/base.rb
|
75
|
+
- lib/observr/event_handlers/darwin.rb
|
76
|
+
- lib/observr/event_handlers/portable.rb
|
77
|
+
- lib/observr/event_handlers/unix.rb
|
78
|
+
- lib/observr/script.rb
|
79
|
+
- observr.gemspec
|
80
|
+
- specs.watchr
|
81
|
+
- test/README
|
82
|
+
- test/event_handlers/test_base.rb
|
83
|
+
- test/event_handlers/test_darwin.rb
|
84
|
+
- test/event_handlers/test_portable.rb
|
85
|
+
- test/event_handlers/test_unix.rb
|
86
|
+
- test/test_controller.rb
|
87
|
+
- test/test_helper.rb
|
88
|
+
- test/test_script.rb
|
89
|
+
- test/test_watchr.rb
|
90
|
+
homepage: http://mynyml.com/ruby/flexible-continuous-testing
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project: observr
|
110
|
+
rubygems_version: 2.0.0
|
111
|
+
signing_key:
|
112
|
+
specification_version: 4
|
113
|
+
summary: Modern continuous testing (flexible alternative to autotest)
|
114
|
+
test_files: []
|