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
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIOUTContinous
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AIOUTContinous 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
+ trans :waiting, :progress, :progressing
26
+ trans :waiting, :regress, :regressing
27
+
28
+ superstate :moving do
29
+ event :halt, :waiting
30
+
31
+ trans :progressing, :regress, :regressing
32
+ trans :regressing, :progress, :progressing
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AISingleChoice
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AISingleChoice 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
+ # TODO how to implement transitions without events
21
+ # trans :dropped, nil , :listing, :unfocus_self
22
+ end
23
+ statemachine :s2 do
24
+ superstate :presentingAIC do
25
+ event :suspend, :suspended
26
+
27
+ trans :defocused, :focus, :focused
28
+ trans :defocused, :next, :focused, :focus_next
29
+ trans :defocused, :prev, :focused, :focus_prev
30
+ trans :defocused, :parent, :focused, :focus_parent
31
+ trans :defocused, :child, :focused, :focus_child
32
+ trans :focused, :defocus, :defocused
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AISingleChoiceElement
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AISingleChoiceElement 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, :all_unchoose, 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
+ trans :focused, :drag, :dragging, :self_choose, In(:unchosen)
34
+ trans :focused, :drag, :dragging, nil, In(:chosen)
35
+ trans :dragging, :drop, :defocused
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'statemachine'
3
+
4
+ module MINT
5
+ class AIO
6
+ def initialize_statemachine
7
+ if @statemachine.blank?
8
+ @statemachine = Statemachine.build do
9
+ superstate :AIO 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 :focused, :defocus, :defocused
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,58 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "AICommand" do
4
+ before (:each) do
5
+ @statemachine = Statemachine.build do
6
+ superstate :AICommand do
7
+ trans :initialized, :organize, :organized
8
+ trans :organized, :present, :presenting
9
+ trans :suspended, :organize, :organized
10
+
11
+ superstate :presenting do
12
+ event :suspend, :suspended
13
+
14
+ trans :defocused, :focus, :focused_H
15
+ trans :defocused, :next, :focused_H#, :focus_next
16
+ trans :defocused, :prev, :focused_H#, :focus_prev
17
+ trans :defocused, :parent, :focused_H#, :focus_parent
18
+
19
+ superstate :focused do
20
+ event :defocus, :defocused
21
+
22
+ trans :deactivated, :activate, :activated
23
+ trans :activated, :deactivate, :deactivated
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ it "should enter the nested superstate :focused" do
31
+ @statemachine.organize
32
+ @statemachine.present
33
+ @statemachine.focus
34
+ @statemachine.state.should == :deactivated
35
+ end
36
+
37
+ it "should support transitions inside :focused" do
38
+ @statemachine.organize
39
+ @statemachine.present
40
+ @statemachine.focus
41
+ @statemachine.activate
42
+ @statemachine.state.should == :activated
43
+ @statemachine.deactivate
44
+ @statemachine.state.should == :deactivated
45
+ end
46
+
47
+ it "should leave the superstate :focused and return to the same point it left" do
48
+ @statemachine.organize
49
+ @statemachine.present
50
+ @statemachine.focus
51
+ @statemachine.activate
52
+ @statemachine.state.should == :activated
53
+ @statemachine.defocus
54
+ @statemachine.state.should == :defocused
55
+ @statemachine.focus
56
+ @statemachine.state.should == :activated
57
+ end
58
+ end
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "AIINContinous" do
4
+ before (:each) do
5
+ @statemachine = Statemachine.build do
6
+ superstate :AIINContinous do
7
+ trans :initialized, :organize, :organized
8
+ trans :organized, :present, :presenting
9
+ trans :suspended, :organize, :organized
10
+
11
+ superstate :presenting do
12
+ event :suspend, :suspended
13
+
14
+ trans :defocused, :focus, :focused
15
+ trans :defocused, :next, :focused, :focus_next
16
+ trans :defocused, :prev, :focused, :focus_prev
17
+ trans :defocused, :parent, :focused, :focus_parent
18
+
19
+ superstate :focused do
20
+ event :defocus, :defocused
21
+
22
+ # TODO how to implement the sensitivity condition?
23
+ trans :waiting, :decrease, :decreasing#, nil, (x1<x0-sensitivy)
24
+ trans :waiting, :increase, :increasing#, nil, (x1>x0-sensitivy)
25
+ trans :increasing, :decrease, :decreasing#, nil, (x1<x0-sensitivy)
26
+ trans :decreasing, :increase, :increasing#, nil, (x1>x0-sensitivy)
27
+
28
+ # TODO how to implement transitions without events
29
+ #trans :decreasing, nil, :waiting, nil, (Dt>tmax)
30
+ #trans :increasing, nil, :waiting, nil, (Dt>tmax)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ it "should enter the nested superstate :focused" do
39
+ @statemachine.organize
40
+ @statemachine.present
41
+ @statemachine.focus
42
+ @statemachine.state.should == :waiting
43
+ end
44
+
45
+ it "should support transitions inside :focused" do
46
+ @statemachine.organize
47
+ @statemachine.present
48
+ @statemachine.focus
49
+ @statemachine.increase
50
+ @statemachine.state.should == :increasing
51
+ @statemachine.decrease
52
+ @statemachine.state.should == :decreasing
53
+ end
54
+
55
+ #TODO implement test for spontaneous transitions
56
+ =begin
57
+ it "should support spontaneous transitions" do
58
+ end
59
+ =end
60
+
61
+ end
@@ -0,0 +1,70 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "AIMultiChoiceElement" do
4
+ before (:each) do
5
+ @statemachine = Statemachine.build do
6
+ superstate :AIMultiChoiceElement do
7
+ trans :initialized, :organize, :organized
8
+ trans :organized, :present, :presenting_H
9
+ trans :suspended, :organize, :organized
10
+
11
+ superstate :presenting do
12
+ event :suspend, :suspended
13
+ parallel :p do
14
+ statemachine :s1 do
15
+ superstate :selection do
16
+ # TODO make In() work
17
+ trans :unchosen, :choose, :chosen#, nil, In(:focused)
18
+ trans :chosen, :unchoose, :unchosen
19
+ end
20
+ end
21
+ statemachine :s2 do
22
+ superstate :presentingAIChoiceElement do
23
+ event :suspend, :suspended
24
+
25
+ trans :defocused, :focus, :focused
26
+ trans :defocused, :next, :focused, :focus_next
27
+ trans :defocused, :prev, :focused, :focus_prev
28
+ trans :defocused, :parent, :focused, :focus_parent
29
+ trans :focused, :defocus, :defocused
30
+ #would the implementation of "if" be like this?
31
+ # TODO make In() work
32
+ trans :focused, :drag, :dragging#, :self_choose, In(:unchosen)
33
+ trans :focused, :drag, :dragging#, nil, In(:chosen)
34
+ trans :dragging, :drop, :defocused
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ it "should enter :presenting" do
44
+ @statemachine.organize
45
+ @statemachine.present
46
+ @statemachine.states_id.should == [:unchosen, :defocused]
47
+ end
48
+
49
+ it "should support parallel transitions" do
50
+ @statemachine.organize
51
+ @statemachine.present
52
+ @statemachine.focus
53
+ @statemachine.choose
54
+ @statemachine.states_id.should == [:chosen, :focused]
55
+ end
56
+
57
+ it "should leave :presenting and return to the proper states" do
58
+ @statemachine.organize
59
+ @statemachine.present
60
+ @statemachine.focus
61
+ @statemachine.choose
62
+ @statemachine.states_id.should == [:chosen, :focused]
63
+ @statemachine.suspend
64
+ @statemachine.state.should == :suspended
65
+ @statemachine.organize
66
+ @statemachine.present
67
+ end
68
+
69
+ #TODO implement test to check if In() is working
70
+ end
@@ -0,0 +1,56 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "AIMultiChoice" do
4
+ before (:each) do
5
+ @statemachine = Statemachine.build do
6
+ superstate :AIMultiChoice do
7
+ trans :initialized, :organize, :organized
8
+ trans :organized, :present, :presenting
9
+ trans :suspended, :organize, :organized
10
+
11
+ superstate :presenting do
12
+ event :suspend, :suspended
13
+ parallel :p do
14
+ statemachine :s1 do
15
+ # TODO make In() work
16
+ trans :listing, :drop, :dropped#, nil, In(:focused)#, :drop_all_dragging, In(:focused)
17
+ trans :listing, :choose_all, :choosing
18
+ trans :listing, :unchoose_all, :unchoosing
19
+ # TODO how to implement transitions without events
20
+ # trans :dropped, nil, :listing, :unfocus_self
21
+ # trans :choosing, nil, :listing, :choose_all_childs
22
+ # trans :unchoosing, nil, :listing, :unchoose_all_childs
23
+ end
24
+ statemachine :s2 do
25
+ superstate :presentingAIC 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 :defocused, :child, :focused#, :focus_child
33
+ trans :focused, :defocus, :defocused
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ it "should support parallel transitions" do
43
+ @statemachine.organize
44
+ @statemachine.present
45
+ @statemachine.states_id.should == [:listing, :defocused]
46
+ @statemachine.choose_all
47
+ @statemachine.focus
48
+ @statemachine.states_id.should == [:choosing, :focused]
49
+ @statemachine.defocus
50
+ @statemachine.states_id.should == [:choosing, :defocused]
51
+ end
52
+
53
+ # TODO implement test to check if In() is working
54
+ # TODO implement test for spontaneous transitions
55
+
56
+ end
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "AIINContinous" do
4
+ before (:each) do
5
+ @statemachine = Statemachine.build do
6
+ superstate :AIOUTContinous do
7
+ trans :initialized, :organize, :organized
8
+ trans :organized, :present, :presenting
9
+ trans :suspended, :organize, :organized
10
+
11
+ superstate :presenting do
12
+ event :suspend, :suspended
13
+
14
+ trans :defocused, :focus, :focused
15
+ trans :defocused, :next, :focused, :focus_next
16
+ trans :defocused, :prev, :focused, :focus_prev
17
+ trans :defocused, :parent, :focused, :focus_parent
18
+
19
+ superstate :focused do
20
+ event :defocus, :defocused
21
+
22
+ trans :waiting, :progress, :progressing
23
+ trans :waiting, :regress, :regressing
24
+
25
+ superstate :moving do
26
+ event :halt, :waiting
27
+
28
+ trans :progressing, :regress, :regressing
29
+ trans :regressing, :progress, :progressing
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ it "should enter the nested superstate :focused" do
39
+ @statemachine.organize
40
+ @statemachine.present
41
+ @statemachine.focus
42
+ @statemachine.state.should == :waiting
43
+ end
44
+
45
+ it "should support transitions inside :focused" do
46
+ @statemachine.organize
47
+ @statemachine.present
48
+ @statemachine.focus
49
+ @statemachine.progress
50
+ @statemachine.state.should == :progressing
51
+ end
52
+
53
+ it "should support transitions inside :moving" do
54
+ @statemachine.organize
55
+ @statemachine.present
56
+ @statemachine.focus
57
+ @statemachine.progress
58
+ @statemachine.state.should == :progressing
59
+ @statemachine.regress
60
+ @statemachine.state.should == :regressing
61
+ end
62
+
63
+ it "should leave :moving" do
64
+ @statemachine.organize
65
+ @statemachine.present
66
+ @statemachine.focus
67
+ @statemachine.progress
68
+ @statemachine.halt
69
+ @statemachine.state.should == :waiting
70
+ end
71
+ end