MINT-core 1.0.1 → 2.0.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.
Files changed (214) hide show
  1. data/Gemfile +22 -3
  2. data/Gemfile.lock +98 -22
  3. data/History.txt +262 -0
  4. data/LICENSE +30 -0
  5. data/MINT-core.gemspec +25 -80
  6. data/Manifest.txt +145 -30
  7. data/README.rdoc +6 -163
  8. data/Rakefile +16 -17
  9. data/bin/mint-aui +3 -3
  10. data/bin/mint-cui-gfx +3 -2
  11. data/bin/mint-juggernaut.sh +0 -0
  12. data/bin/mint-tuplespace +0 -0
  13. data/lib/MINT-core.rb +53 -15
  14. data/lib/MINT-core/agent/agent.rb +1 -1
  15. data/lib/MINT-core/agent/aui.rb +0 -14
  16. data/lib/MINT-core/agent/auicontrol.rb +91 -38
  17. data/lib/MINT-core/agent/cui-gfx.rb +3 -3
  18. data/lib/MINT-core/agent/cuicontrol.rb +94 -24
  19. data/lib/MINT-core/connector/redis_connector.rb +16 -0
  20. data/lib/MINT-core/manager/mapping_manager.rb +101 -0
  21. data/lib/MINT-core/manager/mapping_parser.rb +89 -0
  22. data/lib/MINT-core/manager/mapping_server.rb +99 -0
  23. data/lib/MINT-core/manager/position_updater.rb +33 -0
  24. data/lib/MINT-core/manager/scxml_client.rb +118 -0
  25. data/lib/MINT-core/manager/scxml_server.rb +86 -0
  26. data/lib/MINT-core/mapping/action/action.rb +32 -0
  27. data/lib/MINT-core/mapping/action/backend_action.rb +32 -0
  28. data/lib/MINT-core/mapping/action/bind_action.rb +88 -0
  29. data/lib/MINT-core/mapping/action/event_action.rb +40 -0
  30. data/lib/MINT-core/mapping/complementary_mapping.rb +31 -0
  31. data/lib/MINT-core/mapping/mapping.rb +170 -34
  32. data/lib/MINT-core/mapping/observation/negation_observation.rb +64 -0
  33. data/lib/MINT-core/mapping/observation/observation.rb +219 -0
  34. data/lib/MINT-core/mapping/sequential.rb +1 -2
  35. data/lib/MINT-core/mapping/sequential_mapping.rb +60 -0
  36. data/lib/MINT-core/model/aui/AIChoiceElement.rb +17 -0
  37. data/lib/MINT-core/model/aui/AICommand.rb +7 -0
  38. data/lib/MINT-core/model/aui/AIContainer.rb +73 -0
  39. data/lib/MINT-core/model/aui/AIContext.rb +12 -0
  40. data/lib/MINT-core/model/aui/AIIN.rb +8 -0
  41. data/lib/MINT-core/model/aui/AIINContinuous.rb +56 -0
  42. data/lib/MINT-core/model/aui/AIINDiscrete.rb +8 -0
  43. data/lib/MINT-core/model/aui/AIMultiChoice.rb +1 -2
  44. data/lib/MINT-core/model/aui/AIMultiChoiceElement.rb +4 -51
  45. data/lib/MINT-core/model/aui/AIO.rb +76 -123
  46. data/lib/MINT-core/model/aui/AIOUT.rb +8 -0
  47. data/lib/MINT-core/model/aui/AIOUTContinuous.rb +61 -0
  48. data/lib/MINT-core/model/aui/AIReference.rb +16 -0
  49. data/lib/MINT-core/model/aui/AISingleChoice.rb +18 -1
  50. data/lib/MINT-core/model/aui/AISingleChoiceElement.rb +10 -56
  51. data/lib/MINT-core/model/aui/AISinglePresence.rb +39 -71
  52. data/lib/MINT-core/model/aui/aicommand.scxml +47 -0
  53. data/lib/MINT-core/model/aui/aicontainer.scxml +41 -0
  54. data/lib/MINT-core/model/aui/aicontext.scxml +34 -0
  55. data/lib/MINT-core/model/aui/aiincontinuous.scxml +59 -0
  56. data/lib/MINT-core/model/aui/aiinrange.scxml +86 -0
  57. data/lib/MINT-core/model/aui/aimultichoice.scxml +67 -0
  58. data/lib/MINT-core/model/aui/aimultichoiceelement.scxml +51 -0
  59. data/lib/MINT-core/model/aui/aio.scxml +18 -27
  60. data/lib/MINT-core/model/aui/aioutcontinuous.scxml +66 -0
  61. data/lib/MINT-core/model/aui/aireference.scxml +28 -0
  62. data/lib/MINT-core/model/aui/aisinglechoice.scxml +60 -0
  63. data/lib/MINT-core/model/aui/aisinglechoiceelement.scxml +45 -60
  64. data/lib/MINT-core/model/aui/aisinglepresence.scxml +15 -24
  65. data/lib/MINT-core/model/aui/model.rb +15 -38
  66. data/lib/MINT-core/model/cui/gfx/CIC.rb +34 -10
  67. data/lib/MINT-core/model/cui/gfx/CIO.rb +66 -115
  68. data/lib/MINT-core/model/cui/gfx/CarouFredSel.scxml +58 -0
  69. data/lib/MINT-core/model/cui/gfx/MarkableRadioButton.rb +8 -0
  70. data/lib/MINT-core/model/cui/gfx/RadioButton.rb +8 -0
  71. data/lib/MINT-core/model/cui/gfx/RadioButtonGroup.rb +6 -0
  72. data/lib/MINT-core/model/cui/gfx/button.rb +16 -0
  73. data/lib/MINT-core/model/cui/gfx/button.scxml +58 -0
  74. data/lib/MINT-core/model/cui/gfx/caroufredsel.rb +48 -0
  75. data/lib/MINT-core/model/cui/gfx/cic.scxml +57 -0
  76. data/lib/MINT-core/model/cui/gfx/cio.scxml +54 -0
  77. data/lib/MINT-core/model/cui/gfx/markableradiobutton.scxml +67 -0
  78. data/lib/MINT-core/model/cui/gfx/model.rb +39 -176
  79. data/lib/MINT-core/model/cui/gfx/radiobutton.scxml +59 -0
  80. data/lib/MINT-core/model/interactor.rb +167 -46
  81. data/lib/MINT-core/model/interactor.scxml +3 -0
  82. data/lib/MINT-core/model/interactor_helpers.rb +25 -0
  83. data/lib/MINT-core/model/ir/body/OneHandPoseNavigation.rb +15 -0
  84. data/lib/MINT-core/model/ir/body/body.rb +5 -0
  85. data/lib/MINT-core/model/ir/body/fingertip.rb +114 -0
  86. data/lib/MINT-core/model/ir/body/fingertip.scxml +43 -0
  87. data/lib/MINT-core/model/{body → ir/body}/gesture_button.rb +0 -0
  88. data/lib/MINT-core/model/ir/body/hand.rb +5 -0
  89. data/lib/MINT-core/model/ir/body/head.rb +102 -0
  90. data/lib/MINT-core/model/ir/body/head.scxml +92 -0
  91. data/lib/MINT-core/model/ir/body/onehandposenavigation.scxml +53 -0
  92. data/lib/MINT-core/model/ir/body/pose.rb +99 -0
  93. data/lib/MINT-core/model/ir/browserscreen.rb +27 -0
  94. data/lib/MINT-core/model/ir/browserscreen.scxml +14 -0
  95. data/lib/MINT-core/model/{device → ir}/button.rb +1 -1
  96. data/lib/MINT-core/model/ir/ir.rb +5 -0
  97. data/lib/MINT-core/model/ir/irmedia.rb +5 -0
  98. data/lib/MINT-core/model/ir/irmode.rb +5 -0
  99. data/lib/MINT-core/model/{device → ir}/joypad.rb +1 -1
  100. data/lib/MINT-core/model/ir/mouse.rb +44 -0
  101. data/lib/MINT-core/model/ir/mouse.scxml +35 -0
  102. data/lib/MINT-core/model/{device/mouse.rb → ir/mouse_old.rb} +2 -2
  103. data/lib/MINT-core/model/{device → ir}/pointer.rb +20 -22
  104. data/lib/MINT-core/model/ir/pointer.scxml +19 -0
  105. data/lib/MINT-core/model/ir/screen.rb +5 -0
  106. data/lib/MINT-core/model/{device → ir}/wheel.rb +1 -1
  107. data/lib/MINT-core/model/mim/aicommand_activate_to_button_press.xml +13 -0
  108. data/lib/MINT-core/model/mim/aicommand_deactivate_to_button_release.xml +13 -0
  109. data/lib/MINT-core/model/mim/aio_defocus_to_cio_unhighlight.xml +13 -0
  110. data/lib/MINT-core/model/mim/aio_focus_to_cio_highlight.xml +14 -0
  111. data/lib/MINT-core/model/mim/aio_present_to_cio_display.xml +14 -0
  112. data/lib/MINT-core/model/mim/aio_suspend_to_cio_hide.xml +13 -0
  113. data/lib/MINT-core/model/mim/aisinglechoice_present_to_child_present.xml +14 -0
  114. data/lib/MINT-core/model/mim/aisinglechoiceelement_chosen_to_radiobutton_select.xml +13 -0
  115. data/lib/MINT-core/model/mim/aisinglechoiceelement_unchosen_to_radiobutton_unselect.xml +13 -0
  116. data/lib/MINT-core/model/mim/aisinglepresence_children_finished_to_caroufredsel_init_js.xml +14 -0
  117. data/lib/MINT-core/model/mim/aisinglepresence_present_to_child_present.xml +15 -0
  118. data/lib/MINT-core/model/mim/browserscreen_reload_to_cuicontrol_refresh_all.xml +12 -0
  119. data/lib/MINT-core/model/mim/button_press_to_aicommand_activate.xml +12 -0
  120. data/lib/MINT-core/model/mim/button_release_to_aicommand_deactivate.xml +12 -0
  121. data/lib/MINT-core/model/mim/caroufredsel_refreshing_to_caroufredsel_init_js.xml +14 -0
  122. data/lib/MINT-core/model/mim/cio_display_to_aio_defocus.xml +13 -0
  123. data/lib/MINT-core/model/mim/cio_display_to_aio_present.xml +12 -0
  124. data/lib/MINT-core/model/mim/cio_display_to_cio_display_cache_add.xml +11 -0
  125. data/lib/MINT-core/model/mim/cio_hide_to_aio_suspend.xml +12 -0
  126. data/lib/MINT-core/model/mim/cio_hide_to_cio_display_cache_remove.xml +12 -0
  127. data/lib/MINT-core/model/mim/cio_highlight_to_aio_focus.xml +13 -0
  128. data/lib/MINT-core/model/mim/head_looking_left_to_aisinglepresence_prev.xml +14 -0
  129. data/lib/MINT-core/model/mim/head_looking_right_to_aisinglepresence_next.xml +15 -0
  130. data/lib/MINT-core/model/mim/head_nodding_to_aisinglepresence_next.xml +15 -0
  131. data/lib/MINT-core/model/mim/head_tilting_left_to_aisinglepresence_prev.xml +14 -0
  132. data/lib/MINT-core/model/mim/head_tilting_right_to_aisinglepresence_next.xml +15 -0
  133. data/lib/MINT-core/model/mim/left_button_aisinglepresence_enter.xml +15 -0
  134. data/lib/MINT-core/model/mim/left_button_aisinglepresence_next.xml +15 -0
  135. data/lib/MINT-core/model/mim/mim_default.xml +52 -0
  136. data/lib/MINT-core/model/mim/mint-mappings.xsd +127 -0
  137. data/lib/MINT-core/model/mim/mouse_press_to_aicommand_activate.xml +17 -0
  138. data/lib/MINT-core/model/mim/mouse_press_to_aisinglechoiceelement_choose.xml +17 -0
  139. data/lib/MINT-core/model/mim/mouse_press_to_aisinglechoiceelement_unchoose.xml +17 -0
  140. data/lib/MINT-core/model/mim/mouse_release_to_aicommand_deactivate.xml +16 -0
  141. data/lib/MINT-core/model/mim/mouse_stop_to_cio_highlight.xml +13 -0
  142. data/lib/MINT-core/model/mim/onehandposnav_confirm_to_aichoiceelement_choose.xml +14 -0
  143. data/lib/MINT-core/model/mim/onehandposnav_next_to_aio_next.xml +14 -0
  144. data/lib/MINT-core/model/mim/onehandposnav_previous_to_aio_prev.xml +14 -0
  145. data/lib/MINT-core/model/mim/radiobutton_selected_to_aisinglechoiceelement_choose.xml +13 -0
  146. data/lib/MINT-core/model/mim/radiobutton_unselected_to_aisinglechoiceelement_unchoose.xml +13 -0
  147. data/lib/MINT-core/model/mim/right_button_aisinglepresence_prev.xml +15 -0
  148. data/lib/MINT-core/model/task.rb +6 -6
  149. data/script/console +0 -0
  150. data/script/destroy +0 -0
  151. data/script/generate +0 -0
  152. data/spec/AICommand_spec.rb +20 -0
  153. data/spec/AIContainer_spec.rb +161 -0
  154. data/spec/AIINContinuous_spec.rb +92 -0
  155. data/spec/AIOUTContinuous_spec.rb +93 -0
  156. data/spec/AIO_spec.rb +73 -0
  157. data/spec/AIReference_spec.rb +105 -0
  158. data/spec/AISinglePresence_spec.rb +204 -60
  159. data/spec/Button_spec.rb +114 -0
  160. data/spec/CIO_spec.rb +145 -0
  161. data/spec/Interactor_spec.rb +95 -0
  162. data/spec/MappingManager_spec.rb +126 -0
  163. data/spec/Spontaneous_spec.rb +53 -0
  164. data/spec/aio_agent_spec.rb +215 -186
  165. data/spec/aisinglechoice_spec.rb +147 -88
  166. data/spec/aisinglechoiceelement_spec.rb +154 -70
  167. data/spec/complementary_mapping_spec.rb +158 -0
  168. data/spec/core_spec.rb +27 -15
  169. data/spec/cui_helper.rb +100 -0
  170. data/spec/examples/browserscreen_reload_to_cuicontrol_refresh_all.xml +12 -0
  171. data/spec/examples/mim_streaming_example.xml +9 -0
  172. data/spec/examples/mouse_highlight.xml +22 -0
  173. data/spec/examples/performance_mapping.xml +15 -0
  174. data/spec/examples/reset_click.xml +24 -0
  175. data/spec/interactor_test.scxml +32 -0
  176. data/spec/interactor_test_2.scxml +16 -0
  177. data/spec/mapping_performance_spec.rb +118 -0
  178. data/spec/mapping_server_spec.rb +161 -0
  179. data/spec/mapping_spec.rb +307 -0
  180. data/spec/music_spec.rb +301 -135
  181. data/spec/performance_counter.scxml +9 -0
  182. data/spec/sequential_mappings_spec.rb +69 -0
  183. data/spec/shared/aio_shared.rb +144 -0
  184. data/spec/spec_helper.rb +22 -3
  185. data/spec/spontaneous.scxml +11 -0
  186. data/spec/support/connection_helper.rb +19 -0
  187. data/spec/support/redis_connector_monkey_patch.rb +1 -0
  188. data/spec/support/statemachine_helper.rb +84 -0
  189. data/spec/sync_mappings_spec.rb +96 -0
  190. metadata +219 -354
  191. data/lib/MINT-core/mapping/complementary.rb +0 -100
  192. data/lib/MINT-core/mapping/on_state_change.rb +0 -65
  193. data/lib/MINT-core/model/aui/AIC.rb +0 -86
  194. data/lib/MINT-core/model/aui/AIChoice.rb +0 -65
  195. data/lib/MINT-core/model/aui/AIINChoose.rb +0 -54
  196. data/lib/MINT-core/model/aui/AIOUTDiscrete.rb +0 -43
  197. data/lib/MINT-core/model/aui/aic.png +0 -0
  198. data/lib/MINT-core/model/aui/aic.scxml +0 -50
  199. data/lib/MINT-core/model/aui/aichoice.png +0 -0
  200. data/lib/MINT-core/model/aui/aichoice.scxml +0 -60
  201. data/lib/MINT-core/model/aui/aio.png +0 -0
  202. data/lib/MINT-core/model/aui/aisinglechoiceelement.png +0 -0
  203. data/lib/MINT-core/model/aui/aisinglepresence.png +0 -0
  204. data/lib/MINT-core/model/body/handgesture.rb +0 -279
  205. data/lib/MINT-core/model/body/head.png +0 -0
  206. data/lib/MINT-core/model/body/head.rb +0 -51
  207. data/lib/MINT-core/model/body/head.scxml +0 -28
  208. data/lib/MINT-core/model/cui/gfx/screen.rb +0 -18
  209. data/lib/MINT-core/overrides/rinda.rb +0 -34
  210. data/spec/AIC_spec.rb +0 -69
  211. data/spec/MINT-core_spec.rb +0 -11
  212. data/spec/aio_spec.rb +0 -144
  213. data/spec/cio_spec.rb +0 -369
  214. data/tasks/rspec.rake +0 -21
@@ -0,0 +1,158 @@
1
+ require "spec_helper"
2
+
3
+ require "MINT-core"
4
+
5
+
6
+ class FakeSocketClient < EventMachine::Connection
7
+ include EM::Protocols::LineText2
8
+
9
+ attr_reader :data
10
+
11
+ def initialize
12
+
13
+ end
14
+
15
+ def set_data(data)
16
+ @data = data
17
+
18
+ end
19
+ def post_init
20
+ send_data "HeadMove/10,1/10,0/10,1/-1,6\r\n"
21
+ # send_data "HeadMove/10,1/10,0/10,1/-1,6\r\n"
22
+ end
23
+
24
+ end
25
+
26
+ describe "Complementary mapping" do
27
+ include EventMachine::SpecHelper
28
+
29
+ before :all do
30
+ connection_options = { :adapter => "redis"}
31
+ DataMapper.setup(:default, connection_options)
32
+
33
+ connect do |redis|
34
+ require "MINT-core"
35
+ #require "support/redis_connector_monkey_patch" # TODO dirty patch for a bug that i have not found :(
36
+ DataMapper.finalize
37
+ DataMapper::Model.raise_on_save_failure = true
38
+ end
39
+ end
40
+ describe "with BindAction" do
41
+ it "between AIINContinuous and AIOUTContinuouss should work correctly" do
42
+ connect true do |redis|
43
+
44
+ # capture the result an the very end: the message from the volume interactor to move the progress bar
45
+ # presentation to 20 - additionally checks for correct states for bothe interactors
46
+
47
+ redis.pubsub.subscribe("ss:channels") { |message|
48
+
49
+ if channel.eql? 'ss:channels'
50
+ r = MultiJson.decode msg
51
+
52
+ r["params"]["data"].should== 20
53
+
54
+ volume = MINT::AIOUTContinuous.first(:name=>"volume")
55
+ volume.states.should==[:defocused, :progressing]
56
+
57
+ slider = MINT::AIINContinuous.first(:name=>"slider")
58
+ slider.states.should==[:progressing]
59
+
60
+ done
61
+ end
62
+ }
63
+
64
+ o1 = Observation.new(:element =>"Interactor.AIO.AIIN.AIINContinuous",:name => "slider", :states =>[:progressing], :process=>"onchange")
65
+ o2 = Observation.new(:element =>"Interactor.AIO.AIOUT.AIOUTContinuous",:name=>"volume", :states =>[:presenting], :process=>"onchange")
66
+ a1 = BindAction.new(:elementIn => "Interactor.AIO.AIIN.AIINContinuous",:nameIn => "slider", :attrIn =>"data",:attrOut=>"data",
67
+ #:transform =>:manipulate,
68
+ :elementOut =>"Interactor.AIO.AIOUT.AIOUTContinuous", :nameOut=>"volume" )
69
+ m = MINT::ComplementaryMapping.new(:name => "Mapping_spec", :observations => [o1,o2],:actions =>[a1])
70
+ m.start
71
+
72
+
73
+ check_result = Proc.new {
74
+
75
+ }
76
+
77
+ test_state_flow redis,"Interactor.AIO.AIIN.AIINContinuous.slider",["initialized","organized",["presenting", "defocused"],["focused", "waiting"],["moving","progressing"]] do
78
+ Fiber.new {
79
+ # setup a waiting volume and slider interactor
80
+ volume = MINT::AIOUTContinuous.create(:name=>"volume")
81
+ volume.process_event(:organize).should ==[:organized]
82
+ volume.process_event(:present).should ==[:defocused, :waiting]
83
+
84
+ slider = MINT::AIINContinuous.create(:name=>"slider")
85
+ slider.process_event(:organize).should ==[:organized]
86
+ slider.process_event(:present).should ==[:defocused]
87
+ slider.process_event(:focus).should ==[:waiting]
88
+ redis.publish 'in_channel:Interactor.AIO.AIIN.AIINContinuous.slider:test', 20
89
+
90
+ }.resume
91
+
92
+ end
93
+
94
+
95
+ end
96
+ end
97
+ it "between Head angle and AIOUTContinuous with transformation should work correctly" do
98
+ pending "test not finished"
99
+ connect true do |redis|
100
+
101
+ # capture the result an the very end: the message from the volume interactor to move the progress bar
102
+ # presentation to 20 - additionally checks for correct states for bothe interactors
103
+
104
+ redis.pubsub.subscribe("out_channel:Interactor.AIO.AIOUT.AIOUTContinuous.horizontal_level:testuser") { |message|
105
+
106
+ message.should== "40"
107
+
108
+ volume = MINT::AIOUTContinuous.first(:name=>"horizontal_level")
109
+ volume.states.should==[:defocused, :progressing]
110
+
111
+
112
+ done
113
+
114
+ }
115
+
116
+ #<observation id="22" interactor="Interactor.Head" name="head" states="tilting_detection" process="onchange"/>
117
+ # <observation id="23" interactor="Interactor.AIO.AIOUT.AIOUTContinuous" name="horizontal_level" states="presenting" process="instant"/>
118
+ # </observations>
119
+ # <actions>
120
+ # <bind id="33" interactor_in="Interactor.Head" name_in="head" attr_in="head_angle" interactor_out="Interactor.AIO.AIOUT.AIOUTContinuous" name_out="horizontal_level" attr_out="data" transformation="head_angle_transformation" class="MusicSheet"/>
121
+ # </actions>
122
+
123
+ def head_angle_transformation(angle)
124
+ r = (angle / Math::PI * 100 * 80 / 100).abs.to_i
125
+ p "result #{r}"
126
+ return r
127
+ end
128
+
129
+ o1 = Observation.new(:element =>"Interactor.IR.IRMode.Body.Head",:name => "head", :states =>[:tilting_detection], :process=>"onchange")
130
+ o2 = Observation.new(:element =>"Interactor.AIO.AIOUT.AIOUTContinuous",:name=>"horizontal_level", :states =>[:presenting], :process=>"onchange")
131
+ a1 = BindAction.new(:elementIn => "Interactor.IR.IRMode.Body.Head",:nameIn => "head", :attrIn =>"head_angle",:attrOut=>"data",
132
+ :transform => self.method(:head_angle_transformation),
133
+ :elementOut =>"Interactor.AIO.AIOUT.AIOUTContinuous", :nameOut=>"horizontal_level" )
134
+ m = MINT::ComplementaryMapping.new(:name => "Mapping_spec", :observations => [o1,o2],:actions =>[a1])
135
+ m.start
136
+
137
+ check_result = Proc.new {
138
+
139
+ }
140
+
141
+ test_state_flow_w_name redis,"Interactor.IR.IRMode.Body.Head","head",["disconnected",["tilting_detection", "face_detected", "connected", "centered"],"tilting_left"],check_result do
142
+ Fiber.new{
143
+ # setup a waiting volume and slider interactor
144
+ volume = MINT::AIOUTContinuous.create(:name=>"horizontal_level")
145
+ volume.process_event(:organize).should ==[:organized]
146
+ volume.process_event(:present).should ==[:defocused, :waiting]
147
+
148
+ MINT::Head.create(:name=>"head")
149
+ socket = EM.connect('0.0.0.0', 4242, FakeSocketClient)
150
+
151
+ }.resume
152
+
153
+ end
154
+ end
155
+ end
156
+
157
+ end
158
+ end
@@ -1,28 +1,40 @@
1
1
  require "spec_helper"
2
-
3
- include MINT
2
+ require "em-spec/rspec"
4
3
 
5
4
 
6
5
  describe 'Interactor' do
7
- before :each do
8
- connection_options = { :adapter => "in_memory"}
6
+ include EventMachine::SpecHelper
7
+
8
+ before :all do
9
+ connection_options = { :adapter => "redis"}
9
10
  DataMapper.setup(:default, connection_options)
11
+
12
+ connect do |redis|
13
+ require "MINT-core"
14
+
15
+ DataMapper.finalize
16
+ DataMapper::Model.raise_on_save_failure = true
17
+ end
10
18
  end
11
19
 
12
20
  it 'should initialize to initiated if no initial states have been set' do
13
- Element.create(:name =>"test1")
14
- p = Element.all.first
15
- p.name.should == "test1"
16
- p.states.should == [:initialized]
17
- p.abstract_states.should == "root|initialized"
21
+ connect do |redis|
22
+ MINT::Interactor.create(:name =>"test1")
23
+ p = MINT::Interactor.all.first
24
+ p.name.should == "test1"
25
+ p.states.should == [:initialized]
26
+ p.abstract_states.should == "Interactor|root"
27
+ end
18
28
  end
19
29
 
20
- it 'should initialize to states set have been been set during creation' do
21
- Element.create(:name =>"test2",:states=>[:finished])
22
- p = Element.all.first
23
- p.name.should == "test2"
24
- p.states.should == [:finished]
25
- p.abstract_states.should == "root|finished"
30
+ it 'should initialize to states set that have been set during creation' do
31
+ connect do |redis|
32
+ MINT::Interactor.create(:name =>"test2",:states=>[:finished])
33
+ p = MINT::Interactor.all.first
34
+ p.name.should == "test2"
35
+ p.states.should == [:finished]
36
+ p.abstract_states.should == "root"
37
+ end
26
38
  end
27
39
 
28
40
 
@@ -0,0 +1,100 @@
1
+ class CUIHelper
2
+ def self.create_structure
3
+ @up = MINT::CIO.create(:name => "up",:down =>"center")
4
+ @down = MINT::CIO.create(:name => "down",:up=>"center")
5
+ @left = MINT::CIO.create(:name => "left",:right=>"center")
6
+ @right = MINT::CIO.create(:name => "right",:left=>"center")
7
+ @center = MINT::CIO.create(:name => "center",:left=>"left",:right =>"right",:up =>"up", :down=>"down")
8
+
9
+ end
10
+
11
+ def self.create_structure_w_highlighted
12
+ @up = MINT::CIO.create(:name => "up",:down =>"center",:states => [:displayed])
13
+ @down = MINT::CIO.create(:name => "down",:up=>"center",:states => [:displayed])
14
+ @left = MINT::CIO.create(:name => "left",:right=>"center",:states => [:displayed])
15
+ @right = MINT::CIO.create(:name => "right",:left=>"center",:states => [:displayed])
16
+ @center = MINT::CIO.create(:name => "center",:left=>"left",:right =>"right",:up =>"up", :down=>"down",:states => [:highlighted])
17
+ end
18
+
19
+ def self.set_highlighted
20
+ @up.states=[:displayed]
21
+ @down.states=[:displayed]
22
+ @left.states=[:displayed]
23
+ @right.states=[:displayed]
24
+ @center.states=[:highlighted]
25
+ end
26
+
27
+
28
+ def self.scenario2
29
+ center = create_structure
30
+ @up.states=[:displayed]
31
+ @down.states=[:displayed]
32
+ @left.states=[:displayed]
33
+ @right.states=[:displayed]
34
+ @center.states=[:highlighted]
35
+
36
+ @a_left = MINT::AIO.new(:name => "left",:states =>[:defocused])
37
+ @a_left.save!
38
+
39
+ @a_right = MINT::AIO.new(:name => "right",:states =>[:defocused])
40
+ @a_right.save!
41
+ @a_up = MINT::AIO.new(:name => "up",:states =>[:defocused])
42
+ @a_up.save!
43
+ @a_down = MINT::AIO.new(:name => "down",:states =>[:defocused])
44
+ @a_down.save!
45
+ @a_center = MINT::AIO.new(:name => "center",:states =>[:focused], :next =>"down")
46
+ @a_center.save!
47
+ center
48
+ end
49
+
50
+ def self.scenario3
51
+ @center = MINT::CIO.create(:name => "center",:left=>"left",:states => [:highlighted])
52
+ @left = MINT::CIO.create(:name => "left",:states => [:displayed])
53
+
54
+ @a_center = MINT::AIO.create(:name => "center",:states =>[:focused], :next =>"left")
55
+ @a_left = MINT::AIO.create(:name => "left",:states =>[:defocused])
56
+ end
57
+
58
+ def self.create_sync_mappings
59
+ o1 = Observation.new(:element =>"Interactor.CIO", :states =>[:displaying], :result=> "cio")
60
+ o2 = Observation.new(:eval => "AIO.get('aui',@cio.name)",:result=>"aio")
61
+ o3 = Observation.new(:eval =>"not @aio.is_in(:presenting)")
62
+ a = EventAction.new(:event => :present, :target => "aio")
63
+ s = Sequence.new([o1,o2,o3],a)
64
+ s.start
65
+
66
+ end
67
+
68
+ def self.layout_setup
69
+ scenario2
70
+
71
+ @up.states=[:initialized]
72
+ @down.states=[:initialized]
73
+ @left.states=[:initialized]
74
+ @right.states=[:initialized]
75
+
76
+
77
+ @a_left.states=[:organized]
78
+ @a_right.states=[:organized]
79
+ @a_up.states=[:organized]
80
+ @a_down.states=[:organized]
81
+ end
82
+
83
+
84
+ def self.layout_scenario2(solver)
85
+ MINT::AIContainer.create(:name=>"RecipeFinder_content",:states =>[:organized],:children=>"RecipeFilter")
86
+ MINT::AIContainer.create(:name=>"RecipeFilter",:states =>[:organized],:children=>"RecipeFilter_description1|RecipeFilter_content")
87
+ MINT::AIContainer.create(:name=>"RecipeFilter_description1",:states =>[:organized],:children=>"RecipeFilter_label|RecipeFilter_description")
88
+ MINT::AIReference.create(:name=>"RecipeFilter_label",:label=>"Suchkriterien",:states =>[:organized])
89
+ MINT::AIContext.new(:name=>"RecipeFilter_description",:states =>[:organized],
90
+ :text=>"In diesem Feld koennen Sie mit genauen Angaben zu Ihrem Gericht-Wunsch die Suche nach Ihrem Rezeptvorschlag eingrenzen.")
91
+ MINT::AIContainer.create(:name=>"RecipeFilter_content",:states =>[:organized])
92
+
93
+
94
+ @test = MINT::CIC.create( :name => "RecipeFinder_content", :rows => 1, :cols=> 1,:x=>0, :y=>0, :width =>800, :height => 600)
95
+
96
+ @test.calculate_container(solver,10)
97
+ @test
98
+ end
99
+
100
+ end
@@ -0,0 +1,12 @@
1
+ <mapping name="BrowserScreen reload to CUIControl refresh all" xmlns="http://www.multi-access.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2
+ xsi:schemaLocation="http://www.multi-access.de mint-mappings.xsd">
3
+ <operator type="sequential" id="1">
4
+ <observations>
5
+ <observation id="2" interactor="Interactor.IR.IRMedia.Screen.BrowserScreen" states="reloaded" process="onchange"/>
6
+ </observations>
7
+ <actions>
8
+ <backend id="2222" call="refresh_all" class="CUIControl" />
9
+ </actions>
10
+ </operator>
11
+ </mapping>
12
+
@@ -0,0 +1,9 @@
1
+ <?xml version='1.0'?>
2
+ <mim name="Streaming Example" xmlns="http://www.multi-access.de"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://www.multi-access.de mint-mappings.xsd">
5
+
6
+ <include href="reset_click.xml"/>
7
+ <include href="mouse_highlight.xml" start="true"/>
8
+ <include href="browserscreen_reload_to_cuicontrol_refresh_all.xml" start="true"/>
9
+ </mim>
@@ -0,0 +1,22 @@
1
+ <mapping name="Mouse Interactor Highlighting" xmlns="http://www.multi-access.de"
2
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://www.multi-access.de mint-mappings.xsd">
4
+
5
+ <operator type="complementary" id="33113" >
6
+ <observations>
7
+ <observation id="111" interactor="Interactor.IR.IRMode.Pointer.Mouse" name="mouse" states="stopped" result="p" process="onchange"/>
8
+ </observations>
9
+ <actions>
10
+ <backend id="2222" call="find_cio_from_coordinates" class="CUIControl" parameter="p"/>
11
+ </actions>
12
+ </operator>
13
+
14
+ </mapping>
15
+
16
+ <!--
17
+ o3 = Observation.new(:element =>"Interactor.Pointer.Mouse",:name => "mouse", :states =>[:stopped], :result => "p")
18
+ a2 = BackendAction.new(:call => CUIControl.method(:find_cio_from_coordinates),:parameter => "p")
19
+ m2 = ComplementaryMapping.new(:name=>"Mouse Interactor Highlighting", :observations => [o3],:actions =>[a2])
20
+ m2.start
21
+
22
+ -->
@@ -0,0 +1,15 @@
1
+ <mapping name="Performance Mapping" xmlns="http://www.multi-access.de"
2
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://www.multi-access.de mint-mappings.xsd">
4
+
5
+ <operator type="sequential" id="33113" >
6
+ <observations>
7
+ <observation id="111" interactor="Interactor.InteractorTest" name="test" states="organized" result="p" process="onchange"/>
8
+ <observation id="5" interactor="Interactor.PerformanceCounter" state="initialized" result="counter" process="instant"/>
9
+ </observations>
10
+ <actions>
11
+ <event id="6" type="finished" target="counter"/>
12
+ </actions>
13
+ </operator>
14
+ </mapping>
15
+
@@ -0,0 +1,24 @@
1
+ <mapping name="Reset Click" xmlns="http://www.multi-access.de"
2
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://www.multi-access.de mint-mappings.xsd">
4
+
5
+ <operator type="sequential" id="1">
6
+ <observations>
7
+ <observation id="2" interactor="Interactor.IR.IRMode.Pointer.Mouse" name="mouse" states="left_pressed" result="p" process="onchange"/>
8
+ <observation id="3" interactor="Interactor.AIO.AIIN.AIINDiscrete.AICommand" name="reset" states="focused" result="c" process="instant"/>
9
+ </observations>
10
+ <actions>
11
+ <event id="4" type="activate" target="c"/>
12
+ </actions>
13
+ </operator>
14
+
15
+ </mapping>
16
+
17
+ <!--
18
+
19
+ o4 = Observation.new(:element =>"Interactor.Pointer.Mouse",:name => "mouse", :states =>[:pressed], :result => "p")
20
+ o5 = Observation.new(:element =>"Interactor.AIO.AIIN.AIINDiscrete.AICommand",:name => "reset", :continuous => true, :states =>[:focused], :result => "c")
21
+ a3 = EventAction.new(:event => :activate,:target => "c")
22
+ m3 = ComplementaryMapping.new(:name=>"Reset Click",:observations => [o4,o5],:actions =>[a3])
23
+ m3.start
24
+ -->
@@ -0,0 +1,32 @@
1
+ <scxml initial="initialized" name="InteractorTest" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=630.0 h=510.0 -->
2
+ <state id="organized"><!-- node-size-and-position x=10.0 y=130.0 w=80.0 h=30.0 -->
3
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=160.0 y=160.0 pointx=0.0 pointy=4.0 offsetx=-4.0 offsety=2.0 --></transition>
4
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=50.0 y=260.0 --></transition>
5
+ </state>
6
+ <state id="initialized"><!-- node-size-and-position x=10.0 y=40.0 w=80.0 h=30.0 -->
7
+ <transition event="organize" target="organized"></transition>
8
+ </state>
9
+ <parallel id="presenting"><!-- node-size-and-position x=80.0 y=180.0 w=530.0 h=330.0 -->
10
+ <transition event="suspend" target="suspended"></transition>
11
+ <state id="f" initial="defocused"><!-- node-size-and-position x=60.0 y=40.0 w=340.0 h=100.0 -->
12
+ <state id="defocused"><!-- node-size-and-position x=30.0 y=40.0 w=80.0 h=30.0 -->
13
+ <transition event="focus" target="focused"><!-- edge-path [focused] x=180.0 y=80.0 --></transition>
14
+ </state>
15
+ <state id="focused"><!-- node-size-and-position x=250.0 y=40.0 w=80.0 h=30.0 -->
16
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=180.0 y=30.0 --></transition>
17
+ </state>
18
+ </state>
19
+ <state id="g" initial="in"><!-- node-size-and-position x=50.0 y=180.0 w=340.0 h=100.0 -->
20
+ <state id="in"><!-- node-size-and-position x=30.0 y=40.0 w=80.0 h=30.0 -->
21
+ <transition event="out" target="out"><!-- edge-path [out] x=180.0 y=80.0 --></transition>
22
+ </state>
23
+ <state id="out"><!-- node-size-and-position x=250.0 y=40.0 w=80.0 h=30.0 -->
24
+ <transition event="in" target="in"><!-- edge-path [in] x=180.0 y=30.0 --></transition>
25
+ </state>
26
+ </state>
27
+ </parallel>
28
+ <state id="suspended"><!-- node-size-and-position x=190.0 y=60.0 w=80.0 h=30.0 -->
29
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=290.0 y=140.0 --></transition>
30
+ <transition event="organize" target="organized"><!-- edge-path [organized] pointx=0.0 pointy=11.0 offsetx=2.0 offsety=-1.0 --></transition>
31
+ </state>
32
+ </scxml>
@@ -0,0 +1,16 @@
1
+ <scxml initial="initialized" name="InteractorTest" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=630.0 h=510.0 -->
2
+ <state id="initialized"><!-- node-size-and-position x=10.0 y=40.0 w=80.0 h=30.0 -->
3
+ <transition event="present" target="presenting"></transition>
4
+ </state>
5
+ <state id="presenting" initial="step1"><!-- node-size-and-position x=60.0 y=180.0 w=530.0 h=330.0 -->
6
+ <state id="step1"><!-- node-size-and-position x=30.0 y=70.0 w=100.0 h=100.0 -->
7
+ <transition event="step" target="step2"></transition>
8
+ </state>
9
+ <state id="step2"><!-- node-size-and-position x=190.0 y=70.0 w=100.0 h=100.0 -->
10
+ <transition event="step" target="step3"></transition>
11
+ </state>
12
+ <state id="step3"><!-- node-size-and-position x=350.0 y=60.0 w=100.0 h=100.0 -->
13
+ <transition event="step" target="initialized"></transition>
14
+ </state>
15
+ </state>
16
+ </scxml>