reflexion 0.3.6 → 0.3.8
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/.doc/ext/reflex/midi.cpp +82 -0
- data/.doc/ext/reflex/native.cpp +4 -0
- data/.doc/ext/reflex/note_event.cpp +121 -0
- data/.doc/ext/reflex/reflex.cpp +23 -2
- data/.doc/ext/reflex/view.cpp +11 -16
- data/.doc/ext/reflex/window.cpp +24 -0
- data/ChangeLog.md +13 -0
- data/Rakefile +7 -0
- data/VERSION +1 -1
- data/ext/reflex/midi.cpp +87 -0
- data/ext/reflex/native.cpp +4 -0
- data/ext/reflex/note_event.cpp +130 -0
- data/ext/reflex/reflex.cpp +24 -2
- data/ext/reflex/view.cpp +11 -16
- data/ext/reflex/window.cpp +27 -0
- data/include/reflex/event.h +39 -2
- data/include/reflex/gamepad.h +2 -2
- data/include/reflex/midi.h +53 -0
- data/include/reflex/reflex.h +2 -0
- data/include/reflex/ruby/event.h +11 -0
- data/include/reflex/ruby/midi.h +84 -0
- data/include/reflex/ruby/window.h +27 -0
- data/include/reflex/view.h +9 -1
- data/include/reflex/window.h +6 -0
- data/lib/reflex/note_event.rb +34 -0
- data/lib/reflex/view.rb +2 -1
- data/lib/reflex.rb +9 -8
- data/reflex.gemspec +3 -3
- data/src/application.cpp +5 -2
- data/src/event.cpp +95 -7
- data/src/event.h +5 -0
- data/src/gamepad.cpp +14 -14
- data/src/gamepad.h +9 -9
- data/src/ios/event.mm +10 -2
- data/src/ios/gamepad.mm +2 -1
- data/src/midi.cpp +379 -0
- data/src/midi.h +32 -0
- data/src/osx/event.h +0 -3
- data/src/osx/event.mm +6 -6
- data/src/osx/gamepad_gc.mm +1 -1
- data/src/osx/gamepad_hid.mm +1 -1
- data/src/queue.h +71 -0
- data/src/reflex.cpp +18 -0
- data/src/timer.cpp +3 -10
- data/src/view.cpp +39 -0
- data/src/view.h +2 -0
- data/src/win32/event.cpp +5 -5
- data/src/win32/event.h +0 -2
- data/src/win32/gamepad.cpp +1 -1
- data/src/window.cpp +61 -10
- data/src/window.h +2 -0
- data/test/test_capture_event.rb +20 -16
- data/test/test_key_event.rb +8 -1
- data/test/test_note_event.rb +43 -0
- data/test/test_view.rb +24 -12
- metadata +29 -14
data/src/osx/gamepad_gc.mm
CHANGED
@@ -65,7 +65,7 @@ namespace Reflex
|
|
65
65
|
if (!win) return;
|
66
66
|
|
67
67
|
auto action = pressed ? KeyEvent::DOWN : KeyEvent::UP;
|
68
|
-
KeyEvent e(action, NULL, key_code,
|
68
|
+
KeyEvent e(action, NULL, key_code, KeyEvent_get_modifiers(), 0);
|
69
69
|
Window_call_key_event(win, &e);
|
70
70
|
}
|
71
71
|
|
data/src/osx/gamepad_hid.mm
CHANGED
@@ -308,7 +308,7 @@ namespace Reflex
|
|
308
308
|
if (!win) return;
|
309
309
|
|
310
310
|
auto action = pressed ? KeyEvent::DOWN : KeyEvent::UP;
|
311
|
-
KeyEvent e(action, NULL, key_code,
|
311
|
+
KeyEvent e(action, NULL, key_code, KeyEvent_get_modifiers(), 0);
|
312
312
|
Window_call_key_event(win, &e);
|
313
313
|
}
|
314
314
|
|
data/src/queue.h
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __REFLEX_SRC_QUEUE_H__
|
4
|
+
#define __REFLEX_SRC_QUEUE_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <queue>
|
8
|
+
#include <mutex>
|
9
|
+
#include <condition_variable>
|
10
|
+
|
11
|
+
|
12
|
+
namespace Reflex
|
13
|
+
{
|
14
|
+
|
15
|
+
|
16
|
+
template <typename T>
|
17
|
+
class Queue
|
18
|
+
{
|
19
|
+
|
20
|
+
public:
|
21
|
+
|
22
|
+
void push (const T& value)
|
23
|
+
{
|
24
|
+
{
|
25
|
+
std::lock_guard<std::mutex> lock(mutex);
|
26
|
+
queue.push(value);
|
27
|
+
}
|
28
|
+
condvar.notify_one();
|
29
|
+
}
|
30
|
+
|
31
|
+
T pop ()
|
32
|
+
{
|
33
|
+
std::unique_lock<std::mutex> lock(mutex);
|
34
|
+
condvar.wait(lock, [this] {return !queue.empty();});
|
35
|
+
|
36
|
+
T value = queue.front();
|
37
|
+
queue.pop();
|
38
|
+
return value;
|
39
|
+
}
|
40
|
+
|
41
|
+
bool try_pop (T* value)
|
42
|
+
{
|
43
|
+
std::lock_guard<std::mutex> lock(mutex);
|
44
|
+
if (queue.empty()) return false;
|
45
|
+
|
46
|
+
*value = queue.front();
|
47
|
+
queue.pop();
|
48
|
+
return true;
|
49
|
+
}
|
50
|
+
|
51
|
+
bool empty () const
|
52
|
+
{
|
53
|
+
std::lock_guard<std::mutex> lock(mutex);
|
54
|
+
return queue.empty();
|
55
|
+
}
|
56
|
+
|
57
|
+
private:
|
58
|
+
|
59
|
+
std::queue<T> queue;
|
60
|
+
|
61
|
+
std::mutex mutex;
|
62
|
+
|
63
|
+
std::condition_variable condvar;
|
64
|
+
|
65
|
+
};// Queue
|
66
|
+
|
67
|
+
|
68
|
+
}// Reflex
|
69
|
+
|
70
|
+
|
71
|
+
#endif//EOH
|
data/src/reflex.cpp
ADDED
data/src/timer.cpp
CHANGED
@@ -40,25 +40,18 @@ namespace Reflex
|
|
40
40
|
};// Data
|
41
41
|
|
42
42
|
|
43
|
-
|
44
|
-
{
|
45
|
-
|
46
|
-
static Timer_CreateFun create_fun = NULL;
|
47
|
-
|
48
|
-
}// global
|
43
|
+
static Timer_CreateFun timer_create_fun = NULL;
|
49
44
|
|
50
45
|
void
|
51
46
|
Timer_set_create_fun (Timer_CreateFun fun)
|
52
47
|
{
|
53
|
-
|
48
|
+
timer_create_fun = fun;
|
54
49
|
}
|
55
50
|
|
56
51
|
static Timer*
|
57
52
|
Timer_create ()
|
58
53
|
{
|
59
|
-
return
|
60
|
-
? global::create_fun()
|
61
|
-
: new Timer();
|
54
|
+
return timer_create_fun ? timer_create_fun() : new Timer();
|
62
55
|
}
|
63
56
|
|
64
57
|
|
data/src/view.cpp
CHANGED
@@ -1373,6 +1373,7 @@ namespace Reflex
|
|
1373
1373
|
|
1374
1374
|
KeyEvent e = event->dup();
|
1375
1375
|
view->on_key(&e);
|
1376
|
+
if (e.is_blocked()) return;
|
1376
1377
|
|
1377
1378
|
switch (e.action())
|
1378
1379
|
{
|
@@ -1413,6 +1414,7 @@ namespace Reflex
|
|
1413
1414
|
view->self->pbody->awake();
|
1414
1415
|
|
1415
1416
|
view->on_pointer(event);
|
1417
|
+
if (event->is_blocked()) return;
|
1416
1418
|
|
1417
1419
|
switch ((*event)[0].action())
|
1418
1420
|
{
|
@@ -1506,6 +1508,28 @@ namespace Reflex
|
|
1506
1508
|
view->on_wheel(&e);
|
1507
1509
|
}
|
1508
1510
|
|
1511
|
+
void
|
1512
|
+
View_call_note_event (View* view, NoteEvent* event)
|
1513
|
+
{
|
1514
|
+
if (!view)
|
1515
|
+
argument_error(__FILE__, __LINE__);
|
1516
|
+
if (!event)
|
1517
|
+
argument_error(__FILE__, __LINE__);
|
1518
|
+
|
1519
|
+
if (view->hidden()) return;
|
1520
|
+
|
1521
|
+
NoteEvent e = event->dup();
|
1522
|
+
view->on_note(&e);
|
1523
|
+
if (e.is_blocked()) return;
|
1524
|
+
|
1525
|
+
switch (e.action())
|
1526
|
+
{
|
1527
|
+
case NoteEvent::ON: view->on_note_on(&e); break;
|
1528
|
+
case NoteEvent::OFF: view->on_note_off(&e); break;
|
1529
|
+
default: break;
|
1530
|
+
}
|
1531
|
+
}
|
1532
|
+
|
1509
1533
|
void
|
1510
1534
|
View_call_contact_event (View* view, ContactEvent* event)
|
1511
1535
|
{
|
@@ -2781,6 +2805,21 @@ namespace Reflex
|
|
2781
2805
|
//scroll_by(e->dx, e->dy, e->dz);
|
2782
2806
|
}
|
2783
2807
|
|
2808
|
+
void
|
2809
|
+
View::on_note (NoteEvent* e)
|
2810
|
+
{
|
2811
|
+
}
|
2812
|
+
|
2813
|
+
void
|
2814
|
+
View::on_note_on (NoteEvent* e)
|
2815
|
+
{
|
2816
|
+
}
|
2817
|
+
|
2818
|
+
void
|
2819
|
+
View::on_note_off (NoteEvent* e)
|
2820
|
+
{
|
2821
|
+
}
|
2822
|
+
|
2784
2823
|
void
|
2785
2824
|
View::on_capture (CaptureEvent* e)
|
2786
2825
|
{
|
data/src/view.h
CHANGED
data/src/win32/event.cpp
CHANGED
@@ -12,7 +12,7 @@ namespace Reflex
|
|
12
12
|
|
13
13
|
|
14
14
|
uint
|
15
|
-
|
15
|
+
KeyEvent_get_modifiers ()
|
16
16
|
{
|
17
17
|
return
|
18
18
|
(GetKeyState(VK_SHIFT) & 0x8000 ? MOD_SHIFT : 0) |
|
@@ -37,7 +37,7 @@ namespace Reflex
|
|
37
37
|
}
|
38
38
|
|
39
39
|
NativeKeyEvent::NativeKeyEvent (UINT msg, WPARAM wp, LPARAM lp, const char* chars)
|
40
|
-
: KeyEvent(get_key_action(msg), chars, (int) wp,
|
40
|
+
: KeyEvent(get_key_action(msg), chars, (int) wp, KeyEvent_get_modifiers(), lp & 0xFF)
|
41
41
|
{
|
42
42
|
}
|
43
43
|
|
@@ -135,7 +135,7 @@ namespace Reflex
|
|
135
135
|
get_mouse_type(msg, wp),
|
136
136
|
get_mouse_action(msg),
|
137
137
|
Point(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)),
|
138
|
-
|
138
|
+
KeyEvent_get_modifiers(),
|
139
139
|
get_mouse_click_count(msg),
|
140
140
|
is_mouse_dragging(msg, wp),
|
141
141
|
Xot::time()));
|
@@ -196,7 +196,7 @@ namespace Reflex
|
|
196
196
|
get_touch_type(touch),
|
197
197
|
action,
|
198
198
|
get_touch_position(hwnd, touch),
|
199
|
-
|
199
|
+
KeyEvent_get_modifiers(),
|
200
200
|
action == Pointer::DOWN ? 1 : 0,
|
201
201
|
action == Pointer::MOVE,
|
202
202
|
get_touch_time(touch));
|
@@ -212,7 +212,7 @@ namespace Reflex
|
|
212
212
|
: WheelEvent(
|
213
213
|
GET_X_LPARAM(lp), GET_Y_LPARAM(lp), 0,
|
214
214
|
GET_WHEEL_DELTA_WPARAM(wp_x), -GET_WHEEL_DELTA_WPARAM(wp_y), 0,
|
215
|
-
|
215
|
+
KeyEvent_get_modifiers())
|
216
216
|
{
|
217
217
|
}
|
218
218
|
|
data/src/win32/event.h
CHANGED
data/src/win32/gamepad.cpp
CHANGED
@@ -18,7 +18,7 @@ namespace Reflex
|
|
18
18
|
call_gamepad_event (Window* win, int code, bool pressed)
|
19
19
|
{
|
20
20
|
auto action = pressed ? KeyEvent::DOWN : KeyEvent::UP;
|
21
|
-
KeyEvent e(action, NULL, code,
|
21
|
+
KeyEvent e(action, NULL, code, KeyEvent_get_modifiers(), 0);
|
22
22
|
Window_call_key_event(win, &e);
|
23
23
|
}
|
24
24
|
|
data/src/window.cpp
CHANGED
@@ -103,25 +103,18 @@ namespace Reflex
|
|
103
103
|
}
|
104
104
|
}
|
105
105
|
|
106
|
-
|
107
|
-
{
|
108
|
-
|
109
|
-
static Window_CreateRootViewFun create_root_view_fun = NULL;
|
110
|
-
|
111
|
-
}// global
|
106
|
+
static Window_CreateRootViewFun create_root_view_fun = NULL;
|
112
107
|
|
113
108
|
void
|
114
109
|
Window_set_create_root_view_fun (Window_CreateRootViewFun fun)
|
115
110
|
{
|
116
|
-
|
111
|
+
create_root_view_fun = fun;
|
117
112
|
}
|
118
113
|
|
119
114
|
static View*
|
120
115
|
create_root_view ()
|
121
116
|
{
|
122
|
-
return
|
123
|
-
? global::create_root_view_fun()
|
124
|
-
: new View();
|
117
|
+
return create_root_view_fun ? create_root_view_fun() : new View();
|
125
118
|
}
|
126
119
|
|
127
120
|
void
|
@@ -614,6 +607,49 @@ namespace Reflex
|
|
614
607
|
View_call_wheel_event(window->root(), event);
|
615
608
|
}
|
616
609
|
|
610
|
+
void
|
611
|
+
Window_call_note_event (Window* window, NoteEvent* event)
|
612
|
+
{
|
613
|
+
assert(window);
|
614
|
+
|
615
|
+
if (!event)
|
616
|
+
argument_error(__FILE__, __LINE__);
|
617
|
+
|
618
|
+
for (auto& [view, targets] : window->self->captures)
|
619
|
+
{
|
620
|
+
if (
|
621
|
+
!view->window() ||
|
622
|
+
!is_capturing(view.get(), targets, View::CAPTURE_NOTE))
|
623
|
+
{
|
624
|
+
continue;
|
625
|
+
}
|
626
|
+
|
627
|
+
NoteEvent e = event->dup();
|
628
|
+
NoteEvent_set_captured(&e, true);
|
629
|
+
View_call_note_event(const_cast<View*>(view.get()), &e);
|
630
|
+
|
631
|
+
if (e.is_blocked()) event->block();
|
632
|
+
}
|
633
|
+
|
634
|
+
if (!event->is_blocked())
|
635
|
+
window->on_note(event);
|
636
|
+
|
637
|
+
if (!event->is_blocked())
|
638
|
+
{
|
639
|
+
switch (event->action())
|
640
|
+
{
|
641
|
+
case NoteEvent::ON: window->on_note_on(event); break;
|
642
|
+
case NoteEvent::OFF: window->on_note_off(event); break;
|
643
|
+
default: break;
|
644
|
+
}
|
645
|
+
}
|
646
|
+
|
647
|
+
if (!event->is_blocked() && window->self->focus)
|
648
|
+
View_call_note_event(window->self->focus.get(), event);
|
649
|
+
|
650
|
+
cleanup_captures(window);
|
651
|
+
}
|
652
|
+
|
617
653
|
|
618
654
|
Window::Window ()
|
619
655
|
: self(Window_create_data())
|
@@ -905,6 +941,21 @@ namespace Reflex
|
|
905
941
|
{
|
906
942
|
}
|
907
943
|
|
944
|
+
void
|
945
|
+
Window::on_note (NoteEvent* e)
|
946
|
+
{
|
947
|
+
}
|
948
|
+
|
949
|
+
void
|
950
|
+
Window::on_note_on (NoteEvent* e)
|
951
|
+
{
|
952
|
+
}
|
953
|
+
|
954
|
+
void
|
955
|
+
Window::on_note_off (NoteEvent* e)
|
956
|
+
{
|
957
|
+
}
|
958
|
+
|
908
959
|
Window::operator bool () const
|
909
960
|
{
|
910
961
|
return self && *self;
|
data/src/window.h
CHANGED
data/test/test_capture_event.rb
CHANGED
@@ -26,31 +26,35 @@ class TestCaptureEvent < Test::Unit::TestCase
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_begin()
|
29
|
-
c = event [:key, :pointer], []
|
30
|
-
assert_equal [:key, :pointer], c.begin
|
31
|
-
assert_equal true,
|
32
|
-
assert_equal true,
|
33
|
-
assert_equal true,
|
29
|
+
c = event [:key, :pointer, :note], []
|
30
|
+
assert_equal [:key, :pointer, :note], c.begin
|
31
|
+
assert_equal true, c.begin?(:key)
|
32
|
+
assert_equal true, c.begin?(:pointer)
|
33
|
+
assert_equal true, c.begin?(:note)
|
34
|
+
assert_equal true, c.begin?(:all)
|
34
35
|
|
35
36
|
c = event [:key], []
|
36
37
|
assert_equal [:key], c.begin
|
37
|
-
assert_equal true,
|
38
|
-
assert_equal false,
|
39
|
-
assert_equal false,
|
38
|
+
assert_equal true, c.begin?(:key)
|
39
|
+
assert_equal false, c.begin?(:pointer)
|
40
|
+
assert_equal false, c.begin?(:note)
|
41
|
+
assert_equal false, c.begin?(:all)
|
40
42
|
end
|
41
43
|
|
42
44
|
def test_end()
|
43
|
-
c = event [], [:key, :pointer]
|
44
|
-
assert_equal [:key, :pointer], c.end
|
45
|
-
assert_equal true,
|
46
|
-
assert_equal true,
|
47
|
-
assert_equal true,
|
45
|
+
c = event [], [:key, :pointer, :note]
|
46
|
+
assert_equal [:key, :pointer, :note], c.end
|
47
|
+
assert_equal true, c.end?(:key)
|
48
|
+
assert_equal true, c.end?(:pointer)
|
49
|
+
assert_equal true, c.end?(:note)
|
50
|
+
assert_equal true, c.end?(:all)
|
48
51
|
|
49
52
|
c = event [], [:key]
|
50
53
|
assert_equal [:key], c.end
|
51
|
-
assert_equal true,
|
52
|
-
assert_equal false,
|
53
|
-
assert_equal false,
|
54
|
+
assert_equal true, c.end?(:key)
|
55
|
+
assert_equal false, c.end?(:pointer)
|
56
|
+
assert_equal false, c.end?(:note)
|
57
|
+
assert_equal false, c.end?(:all)
|
54
58
|
end
|
55
59
|
|
56
60
|
end# TestCaptureEvent
|
data/test/test_key_event.rb
CHANGED
@@ -3,7 +3,7 @@ require_relative 'helper'
|
|
3
3
|
|
4
4
|
class TestKeyEvent < Test::Unit::TestCase
|
5
5
|
|
6
|
-
DOWN = Reflex::KeyEvent::DOWN
|
6
|
+
DOWN, UP = Reflex::KeyEvent::DOWN, Reflex::KeyEvent::UP
|
7
7
|
|
8
8
|
def event(*args)
|
9
9
|
Reflex::KeyEvent.new(*args)
|
@@ -29,6 +29,13 @@ class TestKeyEvent < Test::Unit::TestCase
|
|
29
29
|
assert_true e3.blocked?
|
30
30
|
end
|
31
31
|
|
32
|
+
def test_down_up()
|
33
|
+
assert_true event(DOWN, 'a', 1, 2, 3).down?
|
34
|
+
assert_false event(DOWN, 'a', 1, 2, 3).up?
|
35
|
+
assert_false event(UP, 'a', 1, 2, 3).down?
|
36
|
+
assert_true event(UP, 'a', 1, 2, 3).up?
|
37
|
+
end
|
38
|
+
|
32
39
|
def test_chars()
|
33
40
|
assert_equal 'foo', event(DOWN, 'foo', 1, 2, 3).chars
|
34
41
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
|
4
|
+
class TestNoteEvent < Test::Unit::TestCase
|
5
|
+
|
6
|
+
ON, OFF = Reflex::NoteEvent::ON, Reflex::NoteEvent::OFF
|
7
|
+
|
8
|
+
def event(*args)
|
9
|
+
Reflex::NoteEvent.new(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_initialize()
|
13
|
+
e = event ON, 1, 2, 0.5, 3
|
14
|
+
assert_equal :on, e.action
|
15
|
+
assert_equal 1, e.channel
|
16
|
+
assert_equal 2, e.note
|
17
|
+
assert_equal 0.5, e.velocity
|
18
|
+
assert_equal 3, e.time
|
19
|
+
assert_false e.captured?
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_dup()
|
23
|
+
e1 = event ON, 1, 2, 0.5, 3
|
24
|
+
e2 = e1.dup
|
25
|
+
e1.block
|
26
|
+
e3 = e1.dup
|
27
|
+
assert_true e1.blocked?
|
28
|
+
assert_false e2.blocked?
|
29
|
+
assert_true e3.blocked?
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_on_off()
|
33
|
+
assert_true event(ON, 1, 2, 0.5, 3).on?
|
34
|
+
assert_false event(ON, 1, 2, 0.5, 3).off?
|
35
|
+
assert_false event(OFF, 1, 2, 0.5, 3).on?
|
36
|
+
assert_true event(OFF, 1, 2, 0.5, 3).off?
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_frequency()
|
40
|
+
assert_equal 440, event(ON, 1, 69, 0.5, 3).frequency
|
41
|
+
end
|
42
|
+
|
43
|
+
end# TestNoteEvent
|
data/test/test_view.rb
CHANGED
@@ -378,21 +378,22 @@ class TestView < Test::Unit::TestCase
|
|
378
378
|
w.add v
|
379
379
|
assert_equal [], v.capture
|
380
380
|
|
381
|
-
v.capture = :key;
|
382
|
-
v.capture = :pointer;
|
383
|
-
v.capture = :
|
381
|
+
v.capture = :key; assert_equal [:key], v.capture
|
382
|
+
v.capture = :pointer; assert_equal [:pointer], v.capture
|
383
|
+
v.capture = :note; assert_equal [:note], v.capture
|
384
|
+
v.capture = :all; assert_equal [:key, :pointer, :note], v.capture
|
384
385
|
|
385
|
-
v.capture -= [:key];
|
386
|
-
v.capture += [:key];
|
386
|
+
v.capture -= [:key]; assert_equal [:pointer, :note], v.capture
|
387
|
+
v.capture += [:key]; assert_equal [:key, :pointer, :note], v.capture
|
387
388
|
|
388
|
-
v.capture = [];
|
389
|
-
v.capture += [:key, :pointer]; assert_equal [:key, :pointer], v.capture
|
390
|
-
v.capture = [];
|
391
|
-
v.capture += [:all];
|
389
|
+
v.capture = []; assert_equal [], v.capture
|
390
|
+
v.capture += [:key, :pointer, :note]; assert_equal [:key, :pointer, :note], v.capture
|
391
|
+
v.capture = []; assert_equal [], v.capture
|
392
|
+
v.capture += [:all]; assert_equal [:key, :pointer, :note], v.capture
|
392
393
|
|
393
|
-
v.capture -= [];
|
394
|
-
v.capture = [];
|
395
|
-
v.capture += [];
|
394
|
+
v.capture -= []; assert_equal [:key, :pointer, :note], v.capture
|
395
|
+
v.capture = []; assert_equal [], v.capture
|
396
|
+
v.capture += []; assert_equal [], v.capture
|
396
397
|
end
|
397
398
|
|
398
399
|
def test_capturing()
|
@@ -403,24 +404,35 @@ class TestView < Test::Unit::TestCase
|
|
403
404
|
assert_false v.capturing?
|
404
405
|
assert_false v.capturing? :key
|
405
406
|
assert_false v.capturing? :pointer
|
407
|
+
assert_false v.capturing? :note
|
406
408
|
assert_false v.capturing? :all
|
407
409
|
|
408
410
|
v.capture = :key
|
409
411
|
assert_true v.capturing?
|
410
412
|
assert_true v.capturing? :key
|
411
413
|
assert_false v.capturing? :pointer
|
414
|
+
assert_false v.capturing? :note
|
412
415
|
assert_false v.capturing? :all
|
413
416
|
|
414
417
|
v.capture = :pointer
|
415
418
|
assert_true v.capturing?
|
416
419
|
assert_false v.capturing? :key
|
417
420
|
assert_true v.capturing? :pointer
|
421
|
+
assert_false v.capturing? :note
|
422
|
+
assert_false v.capturing? :all
|
423
|
+
|
424
|
+
v.capture = :note
|
425
|
+
assert_true v.capturing?
|
426
|
+
assert_false v.capturing? :key
|
427
|
+
assert_false v.capturing? :pointer
|
428
|
+
assert_true v.capturing? :note
|
418
429
|
assert_false v.capturing? :all
|
419
430
|
|
420
431
|
v.capture = :all
|
421
432
|
assert_true v.capturing?
|
422
433
|
assert_true v.capturing? :key
|
423
434
|
assert_true v.capturing? :pointer
|
435
|
+
assert_true v.capturing? :note
|
424
436
|
assert_true v.capturing? :all
|
425
437
|
end
|
426
438
|
|