fusuma 2.4.1 → 2.5.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.
- checksums.yaml +4 -4
- data/README.md +32 -0
- data/bin/console +2 -2
- data/fusuma.gemspec +17 -18
- data/lib/fusuma/config/index.rb +17 -17
- data/lib/fusuma/config/searcher.rb +1 -1
- data/lib/fusuma/config/yaml_duplication_checker.rb +7 -7
- data/lib/fusuma/config.rb +17 -13
- data/lib/fusuma/device.rb +12 -12
- data/lib/fusuma/environment.rb +10 -10
- data/lib/fusuma/hash_support.rb +1 -1
- data/lib/fusuma/libinput_command.rb +18 -19
- data/lib/fusuma/multi_logger.rb +4 -4
- data/lib/fusuma/plugin/base.rb +6 -6
- data/lib/fusuma/plugin/buffers/buffer.rb +5 -4
- data/lib/fusuma/plugin/buffers/gesture_buffer.rb +6 -6
- data/lib/fusuma/plugin/buffers/timer_buffer.rb +2 -2
- data/lib/fusuma/plugin/detectors/detector.rb +5 -5
- data/lib/fusuma/plugin/detectors/hold_detector.rb +29 -29
- data/lib/fusuma/plugin/detectors/pinch_detector.rb +47 -47
- data/lib/fusuma/plugin/detectors/rotate_detector.rb +40 -40
- data/lib/fusuma/plugin/detectors/swipe_detector.rb +43 -43
- data/lib/fusuma/plugin/events/event.rb +11 -11
- data/lib/fusuma/plugin/events/records/gesture_record.rb +5 -5
- data/lib/fusuma/plugin/events/records/index_record.rb +5 -5
- data/lib/fusuma/plugin/events/records/record.rb +2 -2
- data/lib/fusuma/plugin/events/records/text_record.rb +1 -1
- data/lib/fusuma/plugin/executors/command_executor.rb +4 -4
- data/lib/fusuma/plugin/executors/executor.rb +3 -3
- data/lib/fusuma/plugin/filters/filter.rb +3 -3
- data/lib/fusuma/plugin/filters/libinput_device_filter.rb +12 -12
- data/lib/fusuma/plugin/inputs/input.rb +8 -8
- data/lib/fusuma/plugin/inputs/libinput_command_input.rb +13 -13
- data/lib/fusuma/plugin/inputs/timer_input.rb +3 -3
- data/lib/fusuma/plugin/manager.rb +58 -31
- data/lib/fusuma/plugin/parsers/libinput_gesture_parser.rb +10 -10
- data/lib/fusuma/plugin/parsers/parser.rb +3 -3
- data/lib/fusuma/string_support.rb +3 -3
- data/lib/fusuma/version.rb +1 -1
- data/lib/fusuma.rb +10 -10
- metadata +3 -79
- data/spec/helpers/config_helper.rb +0 -20
- data/spec/lib/config/searcher_spec.rb +0 -179
- data/spec/lib/config_spec.rb +0 -104
- data/spec/lib/custom_process_spec.rb +0 -29
- data/spec/lib/device_spec.rb +0 -96
- data/spec/lib/dummy_config.yml +0 -31
- data/spec/lib/fusuma_spec.rb +0 -103
- data/spec/lib/libinput-list-devices_iberianpig-XPS-9360.txt +0 -181
- data/spec/lib/libinput-list-devices_magic_trackpad.txt +0 -51
- data/spec/lib/libinput-list-devices_razer_razer_blade.txt +0 -252
- data/spec/lib/libinput-list-devices_thejinx0r.txt +0 -361
- data/spec/lib/libinput-list-devices_unavailable.txt +0 -36
- data/spec/lib/libinput_command_spec.rb +0 -164
- data/spec/lib/plugin/base_spec.rb +0 -74
- data/spec/lib/plugin/buffers/buffer_spec.rb +0 -80
- data/spec/lib/plugin/buffers/dummy_buffer.rb +0 -20
- data/spec/lib/plugin/buffers/gesture_buffer_spec.rb +0 -192
- data/spec/lib/plugin/detectors/detector_spec.rb +0 -43
- data/spec/lib/plugin/detectors/dummy_detector.rb +0 -24
- data/spec/lib/plugin/detectors/hold_detector_spec.rb +0 -145
- data/spec/lib/plugin/detectors/pinch_detector_spec.rb +0 -119
- data/spec/lib/plugin/detectors/rotate_detector_spec.rb +0 -125
- data/spec/lib/plugin/detectors/swipe_detector_spec.rb +0 -118
- data/spec/lib/plugin/events/event_spec.rb +0 -30
- data/spec/lib/plugin/events/records/gesture_record_spec.rb +0 -22
- data/spec/lib/plugin/events/records/record_spec.rb +0 -31
- data/spec/lib/plugin/events/records/text_record_spec.rb +0 -26
- data/spec/lib/plugin/executors/command_executor_spec.rb +0 -57
- data/spec/lib/plugin/executors/executor_spec.rb +0 -164
- data/spec/lib/plugin/filters/filter_spec.rb +0 -92
- data/spec/lib/plugin/filters/libinput_filter_spec.rb +0 -120
- data/spec/lib/plugin/inputs/input_spec.rb +0 -70
- data/spec/lib/plugin/inputs/libinput_command_input_spec.rb +0 -121
- data/spec/lib/plugin/inputs/timer_input_spec.rb +0 -40
- data/spec/lib/plugin/manager_spec.rb +0 -27
- data/spec/lib/plugin/parsers/libinput_gesture_parser_spec.rb +0 -76
- data/spec/lib/plugin/parsers/parser_spec.rb +0 -45
- data/spec/spec_helper.rb +0 -23
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require './lib/fusuma/plugin/buffers/buffer'
|
4
|
-
|
5
|
-
module Fusuma
|
6
|
-
module Plugin
|
7
|
-
module Buffers
|
8
|
-
class DummyBuffer < Buffer
|
9
|
-
DEFAULT_SOURCE = 'dummy'
|
10
|
-
|
11
|
-
def config_param_types
|
12
|
-
{
|
13
|
-
source: String,
|
14
|
-
dummy: String
|
15
|
-
}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,192 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'rspec-parameterized'
|
5
|
-
|
6
|
-
require './lib/fusuma/plugin/events/event'
|
7
|
-
require './lib/fusuma/plugin/events/records/gesture_record'
|
8
|
-
require './lib/fusuma/plugin/buffers/gesture_buffer'
|
9
|
-
|
10
|
-
module Fusuma
|
11
|
-
module Plugin
|
12
|
-
module Buffers
|
13
|
-
RSpec.describe GestureBuffer do
|
14
|
-
before do
|
15
|
-
@buffer = GestureBuffer.new
|
16
|
-
delta = Events::Records::GestureRecord::Delta.new(-1, 0, 0, 0, 0, 0)
|
17
|
-
@event_generator = lambda { |time = nil, status = 'update'|
|
18
|
-
Events::Event.new(time: time,
|
19
|
-
tag: 'libinput_gesture_parser',
|
20
|
-
record: Events::Records::GestureRecord.new(
|
21
|
-
status: status,
|
22
|
-
gesture: 'SWIPE',
|
23
|
-
finger: 3,
|
24
|
-
delta: delta
|
25
|
-
))
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
describe '#type' do
|
30
|
-
it { expect(@buffer.type).to eq 'gesture' }
|
31
|
-
end
|
32
|
-
|
33
|
-
describe '#buffer' do
|
34
|
-
it 'should buffer gesture event' do
|
35
|
-
event = @event_generator.call
|
36
|
-
@buffer.buffer(event)
|
37
|
-
expect(@buffer.events).to eq [event]
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should NOT buffer other event' do
|
41
|
-
event = Events::Event.new(tag: 'SHOULD NOT BUFFER', record: 'dummy record')
|
42
|
-
@buffer.buffer(event)
|
43
|
-
expect(@buffer.events).to eq []
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should buffer begin/end' do
|
47
|
-
begin_event = @event_generator.call(nil, 'begin')
|
48
|
-
@buffer.buffer(begin_event)
|
49
|
-
expect(@buffer.events).to eq [begin_event]
|
50
|
-
end_event = @event_generator.call(nil, 'end')
|
51
|
-
@buffer.buffer(end_event)
|
52
|
-
expect(@buffer.events).to eq [begin_event, end_event]
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '#clear_expired' do
|
57
|
-
context 'default' do
|
58
|
-
before do
|
59
|
-
@time = Time.now
|
60
|
-
event1 = @event_generator.call(@time)
|
61
|
-
@buffer.buffer(event1)
|
62
|
-
@event2 = @event_generator.call(@time + 100)
|
63
|
-
@event3 = @event_generator.call(@time + 100)
|
64
|
-
@buffer.buffer(@event2)
|
65
|
-
@buffer.buffer(@event3)
|
66
|
-
end
|
67
|
-
it 'should keep only events generated within 30 seconds' do
|
68
|
-
@buffer.clear_expired(current_time: @time + 100.1)
|
69
|
-
expect(@buffer.events).to eq [@event2, @event3]
|
70
|
-
end
|
71
|
-
context 'with cancelled or ended' do
|
72
|
-
where(:last_state, :want) do
|
73
|
-
[
|
74
|
-
['end', []],
|
75
|
-
['cancelled', []]
|
76
|
-
]
|
77
|
-
end
|
78
|
-
|
79
|
-
with_them do
|
80
|
-
it 'should clear events' do
|
81
|
-
event4 = @event_generator.call(@time + 100, last_state)
|
82
|
-
@buffer.buffer(event4)
|
83
|
-
|
84
|
-
@buffer.clear_expired(current_time: @time + 100.1)
|
85
|
-
expect(@buffer.events).to eq want
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
context 'change seconds to keep' do
|
91
|
-
around do |example|
|
92
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
93
|
-
plugin:
|
94
|
-
buffers:
|
95
|
-
gesture_buffer:
|
96
|
-
seconds_to_keep: 0.3
|
97
|
-
CONFIG
|
98
|
-
|
99
|
-
example.run
|
100
|
-
|
101
|
-
Config.custom_path = nil
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'should keep only events generated within 0.3 seconds' do
|
105
|
-
expect(@buffer.config_params).to eq(seconds_to_keep: 0.3)
|
106
|
-
time = Time.now
|
107
|
-
event1 = @event_generator.call(time)
|
108
|
-
@buffer.buffer(event1)
|
109
|
-
event2 = @event_generator.call(time + 0.1)
|
110
|
-
@buffer.buffer(event2)
|
111
|
-
event3 = @event_generator.call(time + 0.2)
|
112
|
-
@buffer.buffer(event3)
|
113
|
-
@buffer.clear_expired(current_time: time + 0.29)
|
114
|
-
expect(@buffer.events).to eq [event1, event2, event3]
|
115
|
-
|
116
|
-
@buffer.clear_expired(current_time: time + 0.3)
|
117
|
-
expect(@buffer.events).to eq [event2, event3]
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
describe '#source' do
|
123
|
-
it { expect(@buffer.source).to eq GestureBuffer::DEFAULT_SOURCE }
|
124
|
-
|
125
|
-
context 'with config' do
|
126
|
-
around do |example|
|
127
|
-
@source = 'custom_event'
|
128
|
-
|
129
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
130
|
-
plugin:
|
131
|
-
buffers:
|
132
|
-
gesture_buffer:
|
133
|
-
source: #{@source}
|
134
|
-
CONFIG
|
135
|
-
|
136
|
-
example.run
|
137
|
-
|
138
|
-
Config.custom_path = nil
|
139
|
-
end
|
140
|
-
|
141
|
-
it { expect(@buffer.source).to eq @source }
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
describe '#sum_attrs' do
|
146
|
-
it 'should calculate the sum of each attribute'
|
147
|
-
end
|
148
|
-
|
149
|
-
describe '#avg_attrs' do
|
150
|
-
it 'should calculate the average of each attribute'
|
151
|
-
end
|
152
|
-
|
153
|
-
describe '#finger' do
|
154
|
-
it 'should return number of fingers in gestures'
|
155
|
-
end
|
156
|
-
|
157
|
-
describe '#gesture' do
|
158
|
-
it 'should return string of gesture type'
|
159
|
-
end
|
160
|
-
|
161
|
-
describe '#empty?' do
|
162
|
-
context 'no gestures in buffer' do
|
163
|
-
before { @buffer.clear }
|
164
|
-
it { expect(@buffer.empty?).to be true }
|
165
|
-
end
|
166
|
-
|
167
|
-
context 'buffered some gestures' do
|
168
|
-
before { @buffer.buffer(@event_generator.call) }
|
169
|
-
it { expect(@buffer.empty?).to be false }
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
describe '#slect_by_events' do
|
174
|
-
context 'without block' do
|
175
|
-
it { expect(@buffer.select_by_events).to be_a Enumerator }
|
176
|
-
end
|
177
|
-
|
178
|
-
context 'with block' do
|
179
|
-
before do
|
180
|
-
@e1 = @event_generator.call(nil, 'hoge')
|
181
|
-
@e2 = @event_generator.call(nil, 'hoge')
|
182
|
-
@e3 = @event_generator.call(nil, 'fuga')
|
183
|
-
[@e1, @e2, @e3].each { |event| @buffer.buffer(event) }
|
184
|
-
end
|
185
|
-
it { expect(@buffer.select_by_events { |e| e.record.status == 'hoge' }).to be_a GestureBuffer }
|
186
|
-
it { expect(@buffer.select_by_events { |e| e.record.status == 'hoge' }.events).to eq [@e1, @e2] }
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
require './lib/fusuma/plugin/events/event'
|
6
|
-
require './lib/fusuma/plugin/detectors/detector'
|
7
|
-
require './lib/fusuma/config'
|
8
|
-
require_relative '../buffers/dummy_buffer'
|
9
|
-
require_relative './dummy_detector'
|
10
|
-
|
11
|
-
module Fusuma
|
12
|
-
module Plugin
|
13
|
-
module Detectors
|
14
|
-
RSpec.describe DummyDetector do
|
15
|
-
before do
|
16
|
-
@detector = DummyDetector.new
|
17
|
-
@buffer = Buffers::DummyBuffer.new
|
18
|
-
end
|
19
|
-
|
20
|
-
around do |example|
|
21
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
22
|
-
plugin:
|
23
|
-
detectors:
|
24
|
-
dummy_detector:
|
25
|
-
dummy: dummy
|
26
|
-
CONFIG
|
27
|
-
|
28
|
-
example.run
|
29
|
-
|
30
|
-
ConfigHelper.clear_config_yml
|
31
|
-
end
|
32
|
-
|
33
|
-
describe '#detect' do
|
34
|
-
it { expect(@detector.detect([@buffer])).to be_a(Events::Event) }
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '#config_params' do
|
38
|
-
it { expect(@detector.config_params).to eq(dummy: 'dummy') }
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require './lib/fusuma/plugin/detectors/detector'
|
4
|
-
require './lib/fusuma/plugin/buffers/buffer'
|
5
|
-
require './lib/fusuma/plugin/events/records/index_record'
|
6
|
-
|
7
|
-
module Fusuma
|
8
|
-
module Plugin
|
9
|
-
module Detectors
|
10
|
-
class DummyDetector < Detector
|
11
|
-
# @param buffers [Array<Buffers::Buffer>]
|
12
|
-
# @return [Event]
|
13
|
-
def detect(buffers)
|
14
|
-
buffers.each do |buffer|
|
15
|
-
next unless buffer.type == 'dummy'
|
16
|
-
|
17
|
-
record = Events::Records::IndexRecord.new(index: Config::Index.new(%w[dummy index]))
|
18
|
-
return create_event(record: record)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,145 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
require './lib/fusuma/plugin/detectors/hold_detector'
|
6
|
-
require './lib/fusuma/plugin/buffers/gesture_buffer'
|
7
|
-
require './lib/fusuma/plugin/events/records/gesture_record'
|
8
|
-
require './lib/fusuma/config'
|
9
|
-
|
10
|
-
module Fusuma
|
11
|
-
module Plugin
|
12
|
-
module Detectors
|
13
|
-
RSpec.describe HoldDetector do
|
14
|
-
before do
|
15
|
-
@detector = HoldDetector.new
|
16
|
-
@buffer = Buffers::GestureBuffer.new
|
17
|
-
@timer_buffer = Buffers::TimerBuffer.new
|
18
|
-
end
|
19
|
-
|
20
|
-
around do |example|
|
21
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
22
|
-
threshold:
|
23
|
-
hold: 1
|
24
|
-
CONFIG
|
25
|
-
|
26
|
-
example.run
|
27
|
-
|
28
|
-
Config.custom_path = nil
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#detect' do
|
32
|
-
context 'with no hold event in buffer' do
|
33
|
-
before do
|
34
|
-
@buffer.clear
|
35
|
-
end
|
36
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).to eq nil }
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'with only hold begin event' do
|
40
|
-
before do
|
41
|
-
events = create_hold_events(statuses: ['begin'])
|
42
|
-
events.each { |event| @buffer.buffer(event) }
|
43
|
-
end
|
44
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).to be_a Events::Event }
|
45
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record).to be_a Events::Records::IndexRecord }
|
46
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record.index).to be_a Config::Index }
|
47
|
-
it 'should detect 3 fingers hold' do
|
48
|
-
event = @detector.detect([@buffer, @timer_buffer])
|
49
|
-
expect(event.record.index.keys.map(&:symbol)).to eq([:hold, 3, :begin])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'with hold events(begin,cancelled)' do
|
54
|
-
before do
|
55
|
-
events = create_hold_events(statuses: %w[begin cancelled])
|
56
|
-
events.each { |event| @buffer.buffer(event) }
|
57
|
-
end
|
58
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).to be_a Events::Event }
|
59
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record).to be_a Events::Records::IndexRecord }
|
60
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record.index).to be_a Config::Index }
|
61
|
-
it 'should detect 3 fingers hold canclled' do
|
62
|
-
event = @detector.detect([@buffer, @timer_buffer])
|
63
|
-
expect(event.record.index.keys.map(&:symbol)).to eq([:hold, 3, :cancelled])
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context 'with hold events(begin,end)' do
|
68
|
-
before do
|
69
|
-
events = create_hold_events(statuses: %w[begin end])
|
70
|
-
events.each { |event| @buffer.buffer(event) }
|
71
|
-
end
|
72
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).to be_a Events::Event }
|
73
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record).to be_a Events::Records::IndexRecord }
|
74
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record.index).to be_a Config::Index }
|
75
|
-
it 'should detect 3 fingers hold' do
|
76
|
-
events = @detector.detect([@buffer, @timer_buffer])
|
77
|
-
expect(events.record.index.keys.map(&:symbol)).to eq([:hold, 3, :end])
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with hold events and timer events' do
|
82
|
-
context 'with begin event and timer events' do
|
83
|
-
before do
|
84
|
-
events = create_hold_events(statuses: %w[begin])
|
85
|
-
events.each { |event| @buffer.buffer(event) }
|
86
|
-
@time = events.last.time
|
87
|
-
@timer_buffer.buffer(create_timer_event(time: @time + HoldDetector::BASE_THERESHOLD))
|
88
|
-
end
|
89
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).to eq nil }
|
90
|
-
|
91
|
-
context 'with enough holding time' do
|
92
|
-
before do
|
93
|
-
@timer_buffer.clear
|
94
|
-
@timer_buffer.buffer(create_timer_event(time: @time + HoldDetector::BASE_THERESHOLD + 0.01))
|
95
|
-
end
|
96
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).to be_a Events::Event }
|
97
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record).to be_a Events::Records::IndexRecord }
|
98
|
-
it { expect(@detector.detect([@buffer, @timer_buffer]).record.index).to be_a Config::Index }
|
99
|
-
it 'should detect 3 fingers hold' do
|
100
|
-
events = @detector.detect([@buffer, @timer_buffer])
|
101
|
-
expect(events.record.index.keys.map(&:symbol)).to eq([:hold, 3])
|
102
|
-
end
|
103
|
-
end
|
104
|
-
context 'with changing threshold' do
|
105
|
-
around do |example|
|
106
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
107
|
-
threshold:
|
108
|
-
hold: 0.9
|
109
|
-
CONFIG
|
110
|
-
|
111
|
-
example.run
|
112
|
-
|
113
|
-
Config.custom_path = nil
|
114
|
-
end
|
115
|
-
|
116
|
-
it { expect(@detector.detect([@buffer, @timer_buffer])).not_to eq nil }
|
117
|
-
it 'should detect 3 fingers hold' do
|
118
|
-
events = @detector.detect([@buffer, @timer_buffer])
|
119
|
-
expect(events.record.index.keys.map(&:symbol)).to eq([:hold, 3])
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
private
|
127
|
-
|
128
|
-
def create_hold_events(statuses:)
|
129
|
-
record_type = HoldDetector::GESTURE_RECORD_TYPE
|
130
|
-
statuses.map do |status|
|
131
|
-
gesture_record = Events::Records::GestureRecord.new(status: status,
|
132
|
-
gesture: record_type,
|
133
|
-
finger: 3,
|
134
|
-
delta: nil)
|
135
|
-
Events::Event.new(tag: 'libinput_gesture_parser', record: gesture_record)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def create_timer_event(time: Time.now)
|
140
|
-
Events::Event.new(time: time, tag: 'timer_input', record: Events::Records::TextRecord.new('timer'))
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
@@ -1,119 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
require './lib/fusuma/plugin/detectors/pinch_detector'
|
6
|
-
require './lib/fusuma/plugin/buffers/gesture_buffer'
|
7
|
-
require './lib/fusuma/plugin/events/event'
|
8
|
-
require './lib/fusuma/config'
|
9
|
-
|
10
|
-
module Fusuma
|
11
|
-
module Plugin
|
12
|
-
module Detectors
|
13
|
-
RSpec.describe PinchDetector do
|
14
|
-
before do
|
15
|
-
@detector = PinchDetector.new
|
16
|
-
@buffer = Buffers::GestureBuffer.new
|
17
|
-
end
|
18
|
-
|
19
|
-
around do |example|
|
20
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
21
|
-
threshold:
|
22
|
-
rotate: 1
|
23
|
-
CONFIG
|
24
|
-
|
25
|
-
example.run
|
26
|
-
|
27
|
-
Config.custom_path = nil
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#detect' do
|
31
|
-
context 'with no pinch event in buffer' do
|
32
|
-
before do
|
33
|
-
@buffer.clear
|
34
|
-
end
|
35
|
-
it { expect(@detector.detect([@buffer])).to eq nil }
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'with not enough pinch events in buffer' do
|
39
|
-
before do
|
40
|
-
deltas = [
|
41
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 1, 0),
|
42
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 1.1, 0)
|
43
|
-
]
|
44
|
-
events = create_events(deltas: deltas)
|
45
|
-
|
46
|
-
events.each { |event| @buffer.buffer(event) }
|
47
|
-
end
|
48
|
-
it 'should have repeat record' do
|
49
|
-
expect(@detector.detect([@buffer]).record.trigger).to eq :repeat
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'with enough pinch IN event' do
|
54
|
-
before do
|
55
|
-
deltas = [
|
56
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 1.0, 0),
|
57
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 1.0, 0),
|
58
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 2.0, 0)
|
59
|
-
]
|
60
|
-
events = create_events(deltas: deltas)
|
61
|
-
|
62
|
-
events.each { |event| @buffer.buffer(event) }
|
63
|
-
end
|
64
|
-
it { expect(@detector.detect([@buffer])).to all be_a Events::Event }
|
65
|
-
it { expect(@detector.detect([@buffer]).map(&:record)).to all be_a Events::Records::IndexRecord }
|
66
|
-
it { expect(@detector.detect([@buffer]).map(&:record).map(&:index)).to all be_a Config::Index }
|
67
|
-
|
68
|
-
it 'should detect 3 fingers pinch-in (oneshot/repeat)' do
|
69
|
-
events = @detector.detect([@buffer])
|
70
|
-
expect(events[0].record.index.keys.map(&:symbol))
|
71
|
-
.to eq([:pinch, 3, :in])
|
72
|
-
expect(events[1].record.index.keys.map(&:symbol))
|
73
|
-
.to eq([:pinch, 3, :in, :update])
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'with enough pinch OUT event' do
|
78
|
-
before do
|
79
|
-
deltas = [
|
80
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 1.0, 0),
|
81
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0.6, 0),
|
82
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0.3, 0)
|
83
|
-
]
|
84
|
-
events = create_events(deltas: deltas)
|
85
|
-
|
86
|
-
events.each { |event| @buffer.buffer(event) }
|
87
|
-
end
|
88
|
-
it 'should detect 3 fingers pinch-out (oneshot/repeat)' do
|
89
|
-
events = @detector.detect([@buffer])
|
90
|
-
expect(events[0].record.index.keys.map(&:symbol))
|
91
|
-
.to eq([:pinch, 3, :out])
|
92
|
-
expect(events[1].record.index.keys.map(&:symbol))
|
93
|
-
.to eq([:pinch, 3, :out, :update])
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
private
|
99
|
-
|
100
|
-
def create_events(deltas: [])
|
101
|
-
record_type = PinchDetector::GESTURE_RECORD_TYPE
|
102
|
-
deltas.map do |delta|
|
103
|
-
status = if deltas[0].equal? delta
|
104
|
-
'begin'
|
105
|
-
else
|
106
|
-
'update'
|
107
|
-
end
|
108
|
-
|
109
|
-
gesture_record = Events::Records::GestureRecord.new(status: status,
|
110
|
-
gesture: record_type,
|
111
|
-
finger: 3,
|
112
|
-
delta: delta)
|
113
|
-
Events::Event.new(tag: 'libinput_gesture_parser', record: gesture_record)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
require './lib/fusuma/plugin/detectors/rotate_detector'
|
6
|
-
require './lib/fusuma/plugin/buffers/gesture_buffer'
|
7
|
-
require './lib/fusuma/plugin/events/event'
|
8
|
-
require './lib/fusuma/config'
|
9
|
-
|
10
|
-
module Fusuma
|
11
|
-
module Plugin
|
12
|
-
module Detectors
|
13
|
-
RSpec.describe RotateDetector do
|
14
|
-
before do
|
15
|
-
@detector = RotateDetector.new
|
16
|
-
@buffer = Buffers::GestureBuffer.new
|
17
|
-
end
|
18
|
-
|
19
|
-
around do |example|
|
20
|
-
ConfigHelper.load_config_yml = <<~CONFIG
|
21
|
-
threshold:
|
22
|
-
rotate: 1
|
23
|
-
CONFIG
|
24
|
-
|
25
|
-
example.run
|
26
|
-
|
27
|
-
Config.custom_path = nil
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#detect' do
|
31
|
-
context 'with no rotate event in buffer' do
|
32
|
-
before do
|
33
|
-
@buffer.clear
|
34
|
-
end
|
35
|
-
it { expect(@detector.detect([@buffer])).to eq nil }
|
36
|
-
end
|
37
|
-
|
38
|
-
context 'with not enough rotate events in buffer' do
|
39
|
-
before do
|
40
|
-
deltas = [
|
41
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, 0.4),
|
42
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, 0.5)
|
43
|
-
]
|
44
|
-
events = create_events(deltas: deltas)
|
45
|
-
|
46
|
-
events.each { |event| @buffer.buffer(event) }
|
47
|
-
end
|
48
|
-
it 'should have repeat record' do
|
49
|
-
expect(@detector.detect([@buffer]).record.trigger).to eq :repeat
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'with enough rotate IN event' do
|
54
|
-
before do
|
55
|
-
deltas = [
|
56
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, 0.5),
|
57
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, 0.6),
|
58
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, 0.6)
|
59
|
-
]
|
60
|
-
events = create_events(deltas: deltas)
|
61
|
-
|
62
|
-
events.each { |event| @buffer.buffer(event) }
|
63
|
-
end
|
64
|
-
it { expect(@detector.detect([@buffer])).to all be_a Events::Event }
|
65
|
-
it {
|
66
|
-
expect(@detector.detect([@buffer]).map(&:record)).to all be_a Events::Records::IndexRecord
|
67
|
-
}
|
68
|
-
it {
|
69
|
-
expect(@detector.detect([@buffer]).map(&:record).map(&:index)).to all be_a Config::Index
|
70
|
-
}
|
71
|
-
it 'should detect 3 fingers rotate-clockwise (oneshot/repeat)' do
|
72
|
-
events = @detector.detect([@buffer])
|
73
|
-
expect(events[0].record.index.keys.map(&:symbol))
|
74
|
-
.to eq([:rotate, 3, :clockwise])
|
75
|
-
expect(events[1].record.index.keys.map(&:symbol))
|
76
|
-
.to eq([:rotate, 3, :clockwise, :update])
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'with enough rotate OUT event' do
|
81
|
-
before do
|
82
|
-
deltas = [
|
83
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, -0.5),
|
84
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, -0.6),
|
85
|
-
Events::Records::GestureRecord::Delta.new(0, 0, 0, 0, 0, -0.6)
|
86
|
-
]
|
87
|
-
events = create_events(deltas: deltas)
|
88
|
-
|
89
|
-
events.each { |event| @buffer.buffer(event) }
|
90
|
-
end
|
91
|
-
it 'should detect 3 fingers rotate-counterclockwise' do
|
92
|
-
events = @detector.detect([@buffer])
|
93
|
-
indexes = events.map { |e| e.record.index.keys.map(&:symbol) }
|
94
|
-
expect(indexes).to eq(
|
95
|
-
[
|
96
|
-
[:rotate, 3, :counterclockwise],
|
97
|
-
[:rotate, 3, :counterclockwise, :update]
|
98
|
-
]
|
99
|
-
)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
private
|
105
|
-
|
106
|
-
def create_events(deltas: [])
|
107
|
-
record_type = RotateDetector::GESTURE_RECORD_TYPE
|
108
|
-
deltas.map do |delta|
|
109
|
-
status = if deltas[0].equal? delta
|
110
|
-
'begin'
|
111
|
-
else
|
112
|
-
'update'
|
113
|
-
end
|
114
|
-
|
115
|
-
gesture_record = Events::Records::GestureRecord.new(status: status,
|
116
|
-
gesture: record_type,
|
117
|
-
finger: 3,
|
118
|
-
delta: delta)
|
119
|
-
Events::Event.new(tag: 'libinput_gesture_parser', record: gesture_record)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|