MINT-scxml 1.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 (51) hide show
  1. data/.gemtest +0 -0
  2. data/Gemfile +5 -0
  3. data/Gemfile.lock +18 -0
  4. data/History.txt +4 -0
  5. data/MINT-scxml.gemspec +35 -0
  6. data/Manifest.txt +49 -0
  7. data/README.rdoc +50 -0
  8. data/Rakefile +31 -0
  9. data/lib/MINT-scxml.rb +5 -0
  10. data/lib/MINT-scxml/scxml-parser.rb +228 -0
  11. data/spec/atm_spec.rb +69 -0
  12. data/spec/parser_spec.rb +394 -0
  13. data/spec/spec.opts +6 -0
  14. data/spec/spec_helper.rb +8 -0
  15. data/spec/test_handgestures_spec.rb +53 -0
  16. data/spec/testmachines/atm_enhanced.rb +129 -0
  17. data/spec/testmachines/handgestures-scxmlgui.png +0 -0
  18. data/spec/testmachines/handgestures-scxmlgui.scxml +106 -0
  19. data/spec/testmachines/multiplestates.rb +25 -0
  20. data/spec/testmachines/traffic_light_enhanced.rb +56 -0
  21. data/spec/testmachines/vending_machine1.rb +18 -0
  22. data/spec/testmachines/vending_machine2.rb +42 -0
  23. data/spec/testmachines/vending_machine3.rb +48 -0
  24. data/spec/testmachines/vending_machine4.rb +29 -0
  25. data/spec_helper.rb +8 -0
  26. data/statemachines/AICommand_scxml_spec.rb +38 -0
  27. data/statemachines/AIO_scxml_spec.rb +36 -0
  28. data/statemachines/aui-scxml/AIC.scxml +26 -0
  29. data/statemachines/aui-scxml/AICommand.scxml +34 -0
  30. data/statemachines/aui-scxml/AICommand2.scxml +32 -0
  31. data/statemachines/aui-scxml/AIO.scxml +25 -0
  32. data/statemachines/aui/AIC.rb +29 -0
  33. data/statemachines/aui/AIChoiceElement.rb +32 -0
  34. data/statemachines/aui/AICommand.rb +34 -0
  35. data/statemachines/aui/AIIN.rb +7 -0
  36. data/statemachines/aui/AIINContinous.rb +41 -0
  37. data/statemachines/aui/AIMultiChoice.rb +46 -0
  38. data/statemachines/aui/AIMultiChoiceElement.rb +46 -0
  39. data/statemachines/aui/AIOUTContinous.rb +41 -0
  40. data/statemachines/aui/AISingleChoice.rb +42 -0
  41. data/statemachines/aui/AISingleChoiceElement.rb +45 -0
  42. data/statemachines/aui/aio.rb +28 -0
  43. data/statemachines/specs/AICommand_spec.rb +58 -0
  44. data/statemachines/specs/AIINContinous_spec.rb +61 -0
  45. data/statemachines/specs/AIMultiChoiceElement_spec.rb +70 -0
  46. data/statemachines/specs/AIMultiChoice_spec.rb +56 -0
  47. data/statemachines/specs/AIOUTContinous_spec.rb +71 -0
  48. data/statemachines/specs/AIO_spec.rb +53 -0
  49. data/statemachines/specs/AISingleChoiceElement_spec.rb +58 -0
  50. data/statemachines/specs/AISingleChoice_spec.rb +68 -0
  51. metadata +146 -0
data/spec_helper.rb ADDED
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/lib')
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+ require "spec"
5
+ require 'statemachine'
6
+ require 'scxml-parser'
7
+
8
+ $IS_TEST = true
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ describe "AICommand" do
4
+ before (:each) do
5
+ parser = StatemachineParser.new
6
+ @statemachine = parser.build_from_scxml "aui-scxml/AICommand2.scxml"
7
+ end
8
+
9
+
10
+ it "should enter the nested superstate :focused" do
11
+ @statemachine.organize
12
+ @statemachine.present
13
+ @statemachine.focus
14
+ @statemachine.state.should == :deactivated
15
+ end
16
+
17
+ it "should support transitions inside :focused" do
18
+ @statemachine.organize
19
+ @statemachine.present
20
+ @statemachine.focus
21
+ @statemachine.activate
22
+ @statemachine.state.should == :activated
23
+ @statemachine.deactivate
24
+ @statemachine.state.should == :deactivated
25
+ end
26
+
27
+ it "should leave the superstate :focused and return to the same point it left" do
28
+ @statemachine.organize
29
+ @statemachine.present
30
+ @statemachine.focus
31
+ @statemachine.activate
32
+ @statemachine.state.should == :activated
33
+ @statemachine.defocus
34
+ @statemachine.state.should == :defocused
35
+ @statemachine.focus
36
+ @statemachine.state.should == :activated
37
+ end
38
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "AIO" do
4
+ before (:each) do
5
+ parser = StatemachineParser.new
6
+ @statemachine = parser.build_from_scxml "aui-scxml/AIO.scxml"
7
+ end
8
+
9
+
10
+ it "should start in :initialized" do
11
+ @statemachine.state.should == :initialized
12
+ end
13
+
14
+ it "should enter the superstate :presenting" do
15
+ @statemachine.organize
16
+ @statemachine.state.should == :organized
17
+ @statemachine.present
18
+ @statemachine.state.should == :defocused
19
+ end
20
+
21
+ it "should support transitions inside the superstate" do
22
+ @statemachine.organize
23
+ @statemachine.present
24
+ @statemachine.focus
25
+ @statemachine.state.should == :focused
26
+ @statemachine.defocus
27
+ @statemachine.state.should == :defocused
28
+ end
29
+
30
+ it "should leave the superstate" do
31
+ @statemachine.organize
32
+ @statemachine.present
33
+ @statemachine.suspend
34
+ @statemachine.state.should == :suspended
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ <scxml id="SCXML" xmlns="http://www.w3.org/2005/07/scxml">
2
+ <state id="AIC">
3
+ <state id="initialized">
4
+ <transition event="organize" target="organized"/>
5
+ </state>
6
+ <state id="organized">
7
+ <transition event="present" target="presenting"/>
8
+ </state>
9
+ <state id="suspended">
10
+ <transition event="organize" target="organized"/>
11
+ </state>
12
+ <state id="presenting">
13
+ <transition event="suspend" target="suspended"/>
14
+ <state id="defocused">
15
+ <transition event="focus" target="focused"/>
16
+ <transition event="next" target="focused"/>
17
+ <transition event="prev" target="focused"/>
18
+ <transition event="parent" target="focused"/>
19
+ <transition event="child" target="focused"/>
20
+ </state>
21
+ <state id="focused">
22
+ <transition event="defocus" target="defocused"/>
23
+ </state>
24
+ </state>
25
+ </state>
26
+ </scxml>
@@ -0,0 +1,34 @@
1
+ <scxml id="SCXML" xmlns="http://www.w3.org/2005/07/scxml">
2
+ <state id="AICommand">
3
+ <state id="initialized">
4
+ <transition event="organize" target="organized"/>
5
+ </state>
6
+ <state id="organized">
7
+ <transition event="present" target="presenting"/>
8
+ </state>
9
+ <state id="suspended">
10
+ <transition event="organize" target="organized"/>
11
+ </state>
12
+ <state id="presenting">
13
+ <transition event="suspend" target="suspended"/>
14
+ <state id="defocused">
15
+ <transition event="focus" target="focused"/>
16
+ <transition event="next" target="focused"/>
17
+ <transition event="prev" target="focused"/>
18
+ <transition event="parent" target="focused"/>
19
+ </state>
20
+ <state id="focused">
21
+ <transition event="defocus" target="defocused"/>
22
+ <state id="deactivated">
23
+ <transition event="activate" target="activated"/>
24
+ </state>
25
+ <state id="activated">
26
+ <transition event="deactivate" target="deactivated"/>
27
+ </state>
28
+ <history id="history" type="deep">
29
+ <transition target="deactivated"/>
30
+ </history>
31
+ </state>
32
+ </state>
33
+ </state>
34
+ </scxml>
@@ -0,0 +1,32 @@
1
+ <scxml id="SCXML" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=299.19717193536917 h=692.0 -->
2
+ <state id="initialized"><!-- node-size-and-position x=118.75 y=43.0 w=70.0 h=20.0 -->
3
+ <transition event="organize" target="organized"></transition>
4
+ </state>
5
+ <state id="organized"><!-- node-size-and-position x=123.75 y=113.0 w=60.0 h=20.0 -->
6
+ <transition event="present" target="presenting"></transition>
7
+ </state>
8
+ <state id="presenting" initial="defocused"><!-- node-size-and-position x=20.0 y=183.0 w=161.5 h=356.0 -->
9
+ <transition event="suspend" target="suspended"></transition>
10
+ <state id="focused" initial="deactivated"><!-- node-size-and-position x=20.0 y=113.0 w=121.5 h=223.0 -->
11
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=78.78709972846912 y=98.06535407059803 --></transition>
12
+ <state id="deactivated"><!-- node-size-and-position x=29.0 y=113.0 w=70.0 h=20.0 -->
13
+ <transition event="activate" target="activated"><!-- edge-path [activated] x=70.0 y=158.0 pointx=0.0 pointy=19.0 offsetx=1.0 offsety=6.0 --></transition>
14
+ </state>
15
+ <state id="activated"><!-- node-size-and-position x=34.0 y=183.0 w=60.0 h=20.0 -->
16
+ <transition event="deactivate" target="deactivated"><!-- edge-path [deactivated] x=50.0 y=158.0 pointx=0.0 pointy=10.0 offsetx=-1.0 offsety=-1.0 --></transition>
17
+ </state>
18
+ <history id="history" type="deep"><!-- node-size-and-position x=39.0 y=43.0 w=50.0 h=20.0 -->
19
+ <transition target="deactivated"></transition>
20
+ </history>
21
+ </state>
22
+ <state id="defocused"><!-- node-size-and-position x=50.75 y=43.0 w=60.0 h=20.0 -->
23
+ <transition event="focus" target="focused"><!-- edge-path [focused] x=117.5 y=88.0 --></transition>
24
+ <transition event="next" target="focused"><!-- edge-path [focused] x=98.14354986423456 y=93.03267703529902 --></transition>
25
+ <transition event="prev" target="focused"><!-- edge-path [focused] x=136.85645013576544 y=82.96732296470098 --></transition>
26
+ <transition event="parent" target="focused"><!-- edge-path [focused] x=156.21290027153088 y=77.93464592940197 --></transition>
27
+ </state>
28
+ </state>
29
+ <state id="suspended"><!-- node-size-and-position x=125.75 y=589.0 w=60.0 h=20.0 -->
30
+ <transition event="organize" target="organized"><!-- edge-path [organized] x=211.75 y=361.0 --></transition>
31
+ </state>
32
+ </scxml>
@@ -0,0 +1,25 @@
1
+ <scxml id="SCXML" xmlns="http://www.w3.org/2005/07/scxml">
2
+ <state id="AIO">
3
+ <state id="initialized">
4
+ <transition event="organize" target="organized"/>
5
+ </state>
6
+ <state id="organized">
7
+ <transition event="present" target="presenting"/>
8
+ </state>
9
+ <state id="suspended">
10
+ <transition event="organize" target="organized"/>
11
+ </state>
12
+ <state id="presenting">
13
+ <transition event="suspend" target="suspended"/>
14
+ <state id="defocused">
15
+ <transition event="focus" target="focused"/>
16
+ <transition event="next" target="focused"/>
17
+ <transition event="prev" target="focused"/>
18
+ <transition event="parent" target="focused"/>
19
+ </state>
20
+ <state id="focused">
21
+ <transition event="defocus" target="defocused"/>
22
+ </state>
23
+ </state>
24
+ </state>
25
+ </scxml>
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIC < AIO
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AIC do
10
+ trans :initialized, :organize, :organized
11
+ trans :organized, :present, :presenting
12
+ trans :suspended, :organize, :organized
13
+
14
+ superstate :presenting do
15
+ event :suspend, :suspended
16
+
17
+ trans :defocused, :focus, :focused
18
+ trans :defocused, :next, :focused, :focus_next
19
+ trans :defocused, :prev, :focused, :focus_prev
20
+ trans :defocused, :parent, :focused, :focus_parent
21
+ trans :defocused, :child, :focused, :focus_child
22
+ trans :focused, :defocus, :defocused
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ # This code is only used in parallel with others
5
+ module MINT
6
+ class AIChoiceElement
7
+ def initialize_statemachine
8
+ if @statemachine.blank?
9
+ @statemachine = Statemachine.build do
10
+ superstate :AIChoiceElement do
11
+ trans :initialized, :organize, :organized
12
+ trans :organized, :present, :presenting
13
+ trans :suspended, :organize, :organized
14
+
15
+ superstate :presenting do
16
+ event :suspend, :suspended
17
+
18
+ trans :defocused, :focus, :focused
19
+ trans :defocused, :next, :focused, :focus_next
20
+ trans :defocused, :prev, :focused, :focus_prev
21
+ trans :defocused, :parent, :focused, :focus_parent
22
+ trans :focused, :defocus, :defocused
23
+ trans :focused, :drag, :dragging, :self_choose, In(:unchosen)
24
+ trans :focused, :drag, :dragging, nil, In(:chosen)
25
+ trans :dragging, :drop, :defocused
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AICommand < AIO
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AICommand do
10
+ trans :initialized, :organize, :organized
11
+ trans :organized, :present, :presenting
12
+ trans :suspended, :organize, :organized
13
+
14
+ superstate :presenting do
15
+ event :suspend, :suspended
16
+
17
+ trans :defocused, :focus, :focused_H
18
+ trans :defocused, :next, :focused_H, :focus_next
19
+ trans :defocused, :prev, :focused_H, :focus_prev
20
+ trans :defocused, :parent, :focused_H, :focus_parent
21
+
22
+ superstate :focused do
23
+ event :defocus, :defocused
24
+
25
+ trans :deactivated, :activate, :activated
26
+ trans :activated, :deactivate, :deactivated
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIIN < AIO
6
+ end
7
+ end
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIINContinous < AIIN
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AIINContinous do
10
+ trans :initialized, :organize, :organized
11
+ trans :organized, :present, :presenting
12
+ trans :suspended, :organize, :organized
13
+
14
+ superstate :presenting do
15
+ event :suspend, :suspended
16
+
17
+ trans :defocused, :focus, :focused
18
+ trans :defocused, :next, :focused, :focus_next
19
+ trans :defocused, :prev, :focused, :focus_prev
20
+ trans :defocused, :parent, :focused, :focus_parent
21
+
22
+ superstate :focused do
23
+ event :defocus, :defocused
24
+
25
+ # TODO how to implement the sensitivity condition?
26
+ trans :waiting, :decrease, :decreasing#, nil, (x1<x0-sensitivy)
27
+ trans :waiting, :increase, :increasing#, nil, (x1>x0-sensitivy)
28
+ trans :increasing, :decrease, :decreasing#, nil, (x1<x0-sensitivy)
29
+ trans :decreasing, :increase, :increasing#, nil, (x1>x0-sensitivy)
30
+
31
+ # TODO how to implement transitions without events
32
+ #trans :decreasing, nil, :waiting, nil, (Dt>tmax)
33
+ #trans :increasing, nil, :waiting, nil, (Dt>tmax)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIMultiChoice
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AIMultiChoice do
10
+ trans :initialized, :organize, :organized
11
+ trans :organized, :present, :presenting
12
+ trans :suspended, :organize, :organized
13
+
14
+ superstate :presenting do
15
+ event :suspend, :suspended
16
+
17
+ parallel :p do
18
+ statemachine :s1 do
19
+ trans :listing, :drop, :dropped, :drop_all_dragging, In(:focused)
20
+ trans :listing, :choose_all, :choosing
21
+ trans :listing, :unchoose_all, :unchoosing
22
+ # TODO how to implement transitions without events
23
+ # trans :dropped, nil, :listing, :unfocus_self
24
+ # trans :choosing, nil, :listing, :choose_all_childs
25
+ # trans :unchoosing, nil, :listing, :unchoose_all_childs
26
+ end
27
+ statemachine :s2 do
28
+ superstate :presentingAIC do
29
+ event :suspend, :suspended
30
+
31
+ trans :defocused, :focus, :focused
32
+ trans :defocused, :next, :focused, :focus_next
33
+ trans :defocused, :prev, :focused, :focus_prev
34
+ trans :defocused, :parent, :focused, :focus_parent
35
+ trans :defocused, :child, :focused, :focus_child
36
+ trans :focused, :defocus, :defocused
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIMultiChoiceElement
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AIMultiChoiceElement do
10
+ trans :initialized, :organize, :organized
11
+ trans :organized, :present, :presenting_H
12
+ trans :suspended, :organize, :organized
13
+
14
+ superstate :presenting do
15
+ event :suspend, :suspended
16
+
17
+ parallel :p do
18
+ statemachine :s1 do
19
+ superstate :selection do
20
+ trans :unchosen, :choose, :chosen, nil, In(:focused)
21
+ trans :chosen, :unchoose, :unchosen
22
+ end
23
+ end
24
+ statemachine :s2 do
25
+ superstate :presentingAIChoiceElement do
26
+ event :suspend, :suspended
27
+
28
+ trans :defocused, :focus, :focused
29
+ trans :defocused, :next, :focused, :focus_next
30
+ trans :defocused, :prev, :focused, :focus_prev
31
+ trans :defocused, :parent, :focused, :focus_parent
32
+ trans :focused, :defocus, :defocused
33
+ #would the implementation of "if" be like this?
34
+ trans :focused, :drag, :dragging, :self_choose, In(:unchosen)
35
+ trans :focused, :drag, :dragging, nil, In(:chosen)
36
+ trans :dragging, :drop, :defocused
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end