greenletters 0.1.0 → 0.2.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.
- data/Gemfile +4 -0
- data/Gemfile.lock +26 -0
- data/Rakefile +6 -3
- data/examples/cucumber/adventure.feature +1 -0
- data/examples/cucumber/greenletters.log +220 -205
- data/examples/cucumber/support/env.rb +1 -0
- data/examples/greenletters.log +266 -0
- data/greenletters.gemspec +33 -0
- data/lib/greenletters/cucumber_steps.rb +21 -6
- data/lib/greenletters.rb +33 -16
- data/spec/greenletters_spec.rb +0 -1
- data/spec/spec_helper.rb +2 -13
- data/version.txt +1 -1
- metadata +44 -54
- data/test/test_greenletters.rb +0 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
D, [2010-07-31T07:37:35.732465 #16613] DEBUG -- : added trigger on output matching /Would\s+you\s+like\s+instructions\?/
|
|
2
|
+
D, [2010-07-31T07:37:35.732612 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against ""
|
|
3
|
+
D, [2010-07-31T07:37:35.732694 #16613] DEBUG -- : no match
|
|
4
|
+
D, [2010-07-31T07:37:35.734485 #16613] DEBUG -- : added trigger on output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
5
|
+
D, [2010-07-31T07:37:35.734645 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against ""
|
|
6
|
+
D, [2010-07-31T07:37:35.734770 #16613] DEBUG -- : no match
|
|
7
|
+
D, [2010-07-31T07:37:35.737143 #16613] DEBUG -- : installing end marker handler for __GREENLETTERS_PROCESS_ENDED__
|
|
8
|
+
D, [2010-07-31T07:37:35.737434 #16613] DEBUG -- : prepended trigger on output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
9
|
+
D, [2010-07-31T07:37:35.737642 #16613] DEBUG -- : executing /usr/bin/ruby1.8 -C /home/avdi/dev/greenletters/examples -e system(*["adventure"]) -e puts("__GREENLETTERS_PROCESS_ENDED__") -e gets -e exit $?.exitstatus
|
|
10
|
+
D, [2010-07-31T07:37:35.738178 #16613] DEBUG -- : command environment:
|
|
11
|
+
{"LIBGL_DRIVERS_PATH"=>"/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri", "GDM_LANG"=>"en_US.utf8", "LANGUAGE"=>"", "KONSOLE_DBUS_SERVICE"=>":1.25", "LOGNAME"=>"avdi", "GTK_MODULES"=>"canberra-gtk-module", "DBUS_SESSION_BUS_ADDRESS"=>"unix:abstract=/tmp/dbus-yzwJzQz2K2,guid=6bd7f6db661aa3d4c38b7d944c53873f", "SPEECHD_PORT"=>"7560", "PATH"=>"/home/avdi/bin:/home/avdi/share/bin:/home/avdi/.gem/ruby/1.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games", "USER"=>"avdi", "GNOME_KEYRING_PID"=>"2057", "LANG"=>"en_US.utf8", "DEFAULTS_PATH"=>"/usr/share/gconf/gnome.default.path", "WINDOWID"=>"46137398", "XDG_CONFIG_DIRS"=>"/etc/xdg/xdg-gnome:/etc/xdg", "ORBIT_SOCKETDIR"=>"/tmp/orbit-avdi", "XDG_DATA_DIRS"=>"/usr/share/gnome:/usr/local/share/:/usr/share/", "GNOME_DESKTOP_SESSION_ID"=>"this-is-deprecated", "DISPLAY"=>":0.0", "PWD"=>"/home/avdi/dev/greenletters/examples", "GDMSESSION"=>"gnome", "GDM_KEYBOARD_LAYOUT"=>"us", "COLORFGBG"=>"15;0", "XAUTHORITY"=>"/var/run/gdm/auth-for-avdi-pwU0Bi/database", "SSH_AGENT_PID"=>"2116", "XDG_SESSION_COOKIE"=>"95da948d870c084a39cf95e74bcf1d12-1280542527.346178-1033032164", "TERM"=>"xterm", "PROFILEHOME"=>"", "SESSION_MANAGER"=>"local/petronius:@/tmp/.ICE-unix/2075,unix/petronius:/tmp/.ICE-unix/2075", "DESKTOP_AUTOSTART_ID"=>"109b01964624068715128054252796155900000020750004", "SSH_AUTH_SOCK"=>"/tmp/keyring-eGT6zq/ssh", "KONSOLE_DBUS_SESSION"=>"/Sessions/2", "GNOME_KEYRING_CONTROL"=>"/tmp/keyring-eGT6zq", "DESKTOP_SESSION"=>"gnome", "USERNAME"=>"avdi", "MANDATORY_PATH"=>"/usr/share/gconf/gnome.mandatory.path", "HOME"=>"/home/avdi", "GPG_AGENT_INFO"=>"/tmp/gpg-AW2u0g/S.gpg-agent:2117:1", "SHELL"=>"/bin/zsh", "SHLVL"=>"1", "OLDPWD"=>"/home/avdi/dev/greenletters", "EDITOR"=>"/home/avdi/share/bin/emacs-newwindow", "GEM_EDITOR"=>"/home/avdi/share/bin/emacs-newwindow", "ZSH"=>"/home/avdi/.oh-my-zsh", "ZSH_THEME"=>"robbyrussell", "LSCOLORS"=>"Gxfxcxdxbxegedabagacad", "GREP_OPTIONS"=>"--color=auto", "GREP_COLOR"=>"1;32", "PAGER"=>"less", "LC_CTYPE"=>"en_US.UTF-8", "rvm_path"=>"/home/avdi/.rvm", "rvm_rubies_path"=>"/home/avdi/.rvm/rubies", "rvm_scripts_path"=>"/home/avdi/.rvm/scripts", "rvm_archives_path"=>"/home/avdi/.rvm/archives", "rvm_src_path"=>"/home/avdi/.rvm/src", "rvm_log_path"=>"/home/avdi/.rvm/log", "rvm_bin_path"=>"/home/avdi/.rvm/bin", "rvm_gems_path"=>"/home/avdi/.rvm/gems", "rvm_config_path"=>"/home/avdi/.rvm/config", "rvm_tmp_path"=>"/home/avdi/.rvm/tmp", "rvm_hooks_path"=>"/home/avdi/.rvm/hooks", "rvm_gems_cache_path"=>"/home/avdi/.rvm/gems/cache", "rvm_gemset_separator"=>"@", "rvm_version"=>"0.1.28", "_"=>"/home/avdi/.gem/ruby/1.8/bin/cucumber"}
|
|
12
|
+
D, [2010-07-31T07:37:35.753426 #16613] DEBUG -- : spawned pid 16618
|
|
13
|
+
D, [2010-07-31T07:37:35.756271 #16613] DEBUG -- : added trigger on output matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./
|
|
14
|
+
D, [2010-07-31T07:37:35.756524 #16613] DEBUG -- : waiting for output matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./
|
|
15
|
+
D, [2010-07-31T07:37:35.756700 #16613] DEBUG -- : matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./ against ""
|
|
16
|
+
D, [2010-07-31T07:37:35.756833 #16613] DEBUG -- : no match
|
|
17
|
+
D, [2010-07-31T07:37:35.756988 #16613] DEBUG -- : select()
|
|
18
|
+
D, [2010-07-31T07:37:35.757249 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
19
|
+
D, [2010-07-31T07:37:35.757442 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
20
|
+
D, [2010-07-31T07:37:35.757708 #16613] DEBUG -- :
|
|
21
|
+
<<
|
|
22
|
+
<< Welcome to Adventure!! Would you like instructions?
|
|
23
|
+
D, [2010-07-31T07:37:35.757859 #16613] DEBUG -- : read 56 bytes
|
|
24
|
+
D, [2010-07-31T07:37:35.758074 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
25
|
+
D, [2010-07-31T07:37:35.758246 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against "\r\nWelcome to Adventure!! Would you like instructions?\r\n"
|
|
26
|
+
D, [2010-07-31T07:37:35.758396 #16613] DEBUG -- : no match
|
|
27
|
+
D, [2010-07-31T07:37:35.758531 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
28
|
+
D, [2010-07-31T07:37:35.758685 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against "\r\nWelcome to Adventure!! Would you like instructions?\r\n"
|
|
29
|
+
D, [2010-07-31T07:37:35.758838 #16613] DEBUG -- : matched /Would\s+you\s+like\s+instructions\?/
|
|
30
|
+
D, [2010-07-31T07:37:35.759027 #16613] DEBUG -- : match trigger output matching /Would\s+you\s+like\s+instructions\?/
|
|
31
|
+
D, [2010-07-31T07:37:35.759189 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
32
|
+
D, [2010-07-31T07:37:35.759330 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against "\r\n"
|
|
33
|
+
D, [2010-07-31T07:37:35.759459 #16613] DEBUG -- : no match
|
|
34
|
+
D, [2010-07-31T07:37:35.759614 #16613] DEBUG -- : checking output against output matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./
|
|
35
|
+
D, [2010-07-31T07:37:35.759762 #16613] DEBUG -- : matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./ against "\r\n"
|
|
36
|
+
D, [2010-07-31T07:37:35.759890 #16613] DEBUG -- : no match
|
|
37
|
+
D, [2010-07-31T07:37:35.760033 #16613] DEBUG -- : select()
|
|
38
|
+
D, [2010-07-31T07:37:35.760244 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
39
|
+
D, [2010-07-31T07:37:35.760485 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
40
|
+
D, [2010-07-31T07:37:35.760685 #16613] DEBUG -- :
|
|
41
|
+
>> no
|
|
42
|
+
D, [2010-07-31T07:37:35.760825 #16613] DEBUG -- : wrote 3 bytes
|
|
43
|
+
D, [2010-07-31T07:37:35.760958 #16613] DEBUG -- : select()
|
|
44
|
+
D, [2010-07-31T07:37:35.761134 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
45
|
+
D, [2010-07-31T07:37:35.780392 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
46
|
+
D, [2010-07-31T07:37:35.780589 #16613] DEBUG -- :
|
|
47
|
+
<< no
|
|
48
|
+
<<
|
|
49
|
+
<< You are standing at the end of a road before a small brick building.
|
|
50
|
+
<< Around you is a forest. A small stream flows out of the building and
|
|
51
|
+
<< down a gully.
|
|
52
|
+
D, [2010-07-31T07:37:35.780668 #16613] DEBUG -- : read 162 bytes
|
|
53
|
+
D, [2010-07-31T07:37:35.780785 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
54
|
+
D, [2010-07-31T07:37:35.780890 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against "\r\nno\r\n\r\nYou are standing at the end of a road before a small brick building.\r\nAround you is a forest. A small stream flows out of the building and\r\ndown a gully.\r\n"
|
|
55
|
+
D, [2010-07-31T07:37:35.781057 #16613] DEBUG -- : no match
|
|
56
|
+
D, [2010-07-31T07:37:35.781203 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
57
|
+
D, [2010-07-31T07:37:35.781356 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against "\r\nno\r\n\r\nYou are standing at the end of a road before a small brick building.\r\nAround you is a forest. A small stream flows out of the building and\r\ndown a gully.\r\n"
|
|
58
|
+
D, [2010-07-31T07:37:35.781478 #16613] DEBUG -- : no match
|
|
59
|
+
D, [2010-07-31T07:37:35.781590 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
60
|
+
D, [2010-07-31T07:37:35.781747 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against "\r\nno\r\n\r\nYou are standing at the end of a road before a small brick building.\r\nAround you is a forest. A small stream flows out of the building and\r\ndown a gully.\r\n"
|
|
61
|
+
D, [2010-07-31T07:37:35.781878 #16613] DEBUG -- : no match
|
|
62
|
+
D, [2010-07-31T07:37:35.782025 #16613] DEBUG -- : checking output against output matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./
|
|
63
|
+
D, [2010-07-31T07:37:35.782197 #16613] DEBUG -- : matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./ against "\r\nno\r\n\r\nYou are standing at the end of a road before a small brick building.\r\nAround you is a forest. A small stream flows out of the building and\r\ndown a gully.\r\n"
|
|
64
|
+
D, [2010-07-31T07:37:35.782368 #16613] DEBUG -- : matched /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./
|
|
65
|
+
D, [2010-07-31T07:37:35.782489 #16613] DEBUG -- : match trigger output matching /You\s+are\s+standing\s+at\s+the\s+end\s+of\s+a\s+road\s+before\s+a\s+small\s+brick\s+building\.\s+Around\s+you\s+is\s+a\s+forest\.\s+A\s+small\s+stream\s+flows\s+out\s+of\s+the\s+building\s+and\s+down\s+a\s+gully\./
|
|
66
|
+
D, [2010-07-31T07:37:35.782572 #16613] DEBUG -- : unblocked
|
|
67
|
+
D, [2010-07-31T07:37:35.782654 #16613] DEBUG -- : trigger removed
|
|
68
|
+
D, [2010-07-31T07:37:35.785517 #16613] DEBUG -- : added trigger on output matching /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./
|
|
69
|
+
D, [2010-07-31T07:37:35.785600 #16613] DEBUG -- : waiting for output matching /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./
|
|
70
|
+
D, [2010-07-31T07:37:35.785667 #16613] DEBUG -- : matching /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./ against "\r\n"
|
|
71
|
+
D, [2010-07-31T07:37:35.785719 #16613] DEBUG -- : no match
|
|
72
|
+
D, [2010-07-31T07:37:35.785776 #16613] DEBUG -- : select()
|
|
73
|
+
D, [2010-07-31T07:37:35.785875 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
74
|
+
D, [2010-07-31T07:37:35.785960 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
75
|
+
D, [2010-07-31T07:37:35.786052 #16613] DEBUG -- :
|
|
76
|
+
>> east
|
|
77
|
+
D, [2010-07-31T07:37:35.786108 #16613] DEBUG -- : wrote 5 bytes
|
|
78
|
+
D, [2010-07-31T07:37:35.786157 #16613] DEBUG -- : select()
|
|
79
|
+
D, [2010-07-31T07:37:35.786234 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
80
|
+
D, [2010-07-31T07:37:35.800435 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
81
|
+
D, [2010-07-31T07:37:35.800788 #16613] DEBUG -- :
|
|
82
|
+
<< east
|
|
83
|
+
<<
|
|
84
|
+
<< You are inside a building, a well house for a large spring.
|
|
85
|
+
<<
|
|
86
|
+
<< There are some keys on the ground here.
|
|
87
|
+
<<
|
|
88
|
+
<< There is a shiny brass lamp nearby.
|
|
89
|
+
<<
|
|
90
|
+
<< There is food here.
|
|
91
|
+
<<
|
|
92
|
+
<< There is a bottle of water here.
|
|
93
|
+
D, [2010-07-31T07:37:35.800945 #16613] DEBUG -- : read 210 bytes
|
|
94
|
+
D, [2010-07-31T07:37:35.801086 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
95
|
+
D, [2010-07-31T07:37:35.801204 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against "\r\neast\r\n\r\nYou are inside a building, a well house for a large spring.\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\n"
|
|
96
|
+
D, [2010-07-31T07:37:35.801285 #16613] DEBUG -- : no match
|
|
97
|
+
D, [2010-07-31T07:37:35.801373 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
98
|
+
D, [2010-07-31T07:37:35.801484 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against "\r\neast\r\n\r\nYou are inside a building, a well house for a large spring.\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\n"
|
|
99
|
+
D, [2010-07-31T07:37:35.801563 #16613] DEBUG -- : no match
|
|
100
|
+
D, [2010-07-31T07:37:35.801645 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
101
|
+
D, [2010-07-31T07:37:35.801756 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against "\r\neast\r\n\r\nYou are inside a building, a well house for a large spring.\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\n"
|
|
102
|
+
D, [2010-07-31T07:37:35.801835 #16613] DEBUG -- : no match
|
|
103
|
+
D, [2010-07-31T07:37:35.801917 #16613] DEBUG -- : checking output against output matching /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./
|
|
104
|
+
D, [2010-07-31T07:37:35.802020 #16613] DEBUG -- : matching /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./ against "\r\neast\r\n\r\nYou are inside a building, a well house for a large spring.\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\n"
|
|
105
|
+
D, [2010-07-31T07:37:35.802119 #16613] DEBUG -- : matched /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./
|
|
106
|
+
D, [2010-07-31T07:37:35.802212 #16613] DEBUG -- : match trigger output matching /You\s+are\s+inside\s+a\s+building,\s+a\s+well\s+house\s+for\s+a\s+large\s+spring\./
|
|
107
|
+
D, [2010-07-31T07:37:35.802288 #16613] DEBUG -- : unblocked
|
|
108
|
+
D, [2010-07-31T07:37:35.802369 #16613] DEBUG -- : trigger removed
|
|
109
|
+
D, [2010-07-31T07:37:35.805831 #16613] DEBUG -- : added trigger on output matching /You're\s+at\s+end\s+of\s+road\s+again\./
|
|
110
|
+
D, [2010-07-31T07:37:35.805956 #16613] DEBUG -- : waiting for output matching /You're\s+at\s+end\s+of\s+road\s+again\./
|
|
111
|
+
D, [2010-07-31T07:37:35.806066 #16613] DEBUG -- : matching /You're\s+at\s+end\s+of\s+road\s+again\./ against "\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\n"
|
|
112
|
+
D, [2010-07-31T07:37:35.806152 #16613] DEBUG -- : no match
|
|
113
|
+
D, [2010-07-31T07:37:35.806244 #16613] DEBUG -- : select()
|
|
114
|
+
D, [2010-07-31T07:37:35.806388 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
115
|
+
D, [2010-07-31T07:37:35.806504 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
116
|
+
D, [2010-07-31T07:37:35.806638 #16613] DEBUG -- :
|
|
117
|
+
>> west
|
|
118
|
+
D, [2010-07-31T07:37:35.806723 #16613] DEBUG -- : wrote 5 bytes
|
|
119
|
+
D, [2010-07-31T07:37:35.806805 #16613] DEBUG -- : select()
|
|
120
|
+
D, [2010-07-31T07:37:35.806935 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
121
|
+
D, [2010-07-31T07:37:35.813204 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
122
|
+
D, [2010-07-31T07:37:35.813825 #16613] DEBUG -- :
|
|
123
|
+
<< west
|
|
124
|
+
<<
|
|
125
|
+
<< You're at end of road again.
|
|
126
|
+
D, [2010-07-31T07:37:35.813915 #16613] DEBUG -- : read 38 bytes
|
|
127
|
+
D, [2010-07-31T07:37:35.813997 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
128
|
+
D, [2010-07-31T07:37:35.814065 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against "\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\nwest\r\n\r\nYou're at end of road again.\r\n"
|
|
129
|
+
D, [2010-07-31T07:37:35.814111 #16613] DEBUG -- : no match
|
|
130
|
+
D, [2010-07-31T07:37:35.814158 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
131
|
+
D, [2010-07-31T07:37:35.814217 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against "\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\nwest\r\n\r\nYou're at end of road again.\r\n"
|
|
132
|
+
D, [2010-07-31T07:37:35.814260 #16613] DEBUG -- : no match
|
|
133
|
+
D, [2010-07-31T07:37:35.814306 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
134
|
+
D, [2010-07-31T07:37:35.814361 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against "\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\nwest\r\n\r\nYou're at end of road again.\r\n"
|
|
135
|
+
D, [2010-07-31T07:37:35.814410 #16613] DEBUG -- : no match
|
|
136
|
+
D, [2010-07-31T07:37:35.814455 #16613] DEBUG -- : checking output against output matching /You're\s+at\s+end\s+of\s+road\s+again\./
|
|
137
|
+
D, [2010-07-31T07:37:35.814511 #16613] DEBUG -- : matching /You're\s+at\s+end\s+of\s+road\s+again\./ against "\r\n\r\nThere are some keys on the ground here.\r\n\r\nThere is a shiny brass lamp nearby.\r\n\r\nThere is food here.\r\n\r\nThere is a bottle of water here.\r\nwest\r\n\r\nYou're at end of road again.\r\n"
|
|
138
|
+
D, [2010-07-31T07:37:35.814564 #16613] DEBUG -- : matched /You're\s+at\s+end\s+of\s+road\s+again\./
|
|
139
|
+
D, [2010-07-31T07:37:35.814613 #16613] DEBUG -- : match trigger output matching /You're\s+at\s+end\s+of\s+road\s+again\./
|
|
140
|
+
D, [2010-07-31T07:37:35.814660 #16613] DEBUG -- : unblocked
|
|
141
|
+
D, [2010-07-31T07:37:35.814705 #16613] DEBUG -- : trigger removed
|
|
142
|
+
D, [2010-07-31T07:37:35.817046 #16613] DEBUG -- : added trigger on output matching /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./
|
|
143
|
+
D, [2010-07-31T07:37:35.817133 #16613] DEBUG -- : waiting for output matching /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./
|
|
144
|
+
D, [2010-07-31T07:37:35.817212 #16613] DEBUG -- : matching /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./ against "\r\n"
|
|
145
|
+
D, [2010-07-31T07:37:35.817261 #16613] DEBUG -- : no match
|
|
146
|
+
D, [2010-07-31T07:37:35.817310 #16613] DEBUG -- : select()
|
|
147
|
+
D, [2010-07-31T07:37:35.817393 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
148
|
+
D, [2010-07-31T07:37:35.817464 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
149
|
+
D, [2010-07-31T07:37:35.817542 #16613] DEBUG -- :
|
|
150
|
+
>> south
|
|
151
|
+
D, [2010-07-31T07:37:35.817597 #16613] DEBUG -- : wrote 6 bytes
|
|
152
|
+
D, [2010-07-31T07:37:35.817640 #16613] DEBUG -- : select()
|
|
153
|
+
D, [2010-07-31T07:37:35.817705 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
154
|
+
D, [2010-07-31T07:37:35.830371 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
155
|
+
D, [2010-07-31T07:37:35.830569 #16613] DEBUG -- :
|
|
156
|
+
<< south
|
|
157
|
+
<<
|
|
158
|
+
<< You are in a valley in the forest beside a stream tumbling along a
|
|
159
|
+
<< rocky bed.
|
|
160
|
+
D, [2010-07-31T07:37:35.830649 #16613] DEBUG -- : read 89 bytes
|
|
161
|
+
D, [2010-07-31T07:37:35.830766 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
162
|
+
D, [2010-07-31T07:37:35.830866 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against "\r\nsouth\r\n\r\nYou are in a valley in the forest beside a stream tumbling along a\r\nrocky bed.\r\n"
|
|
163
|
+
D, [2010-07-31T07:37:35.831004 #16613] DEBUG -- : no match
|
|
164
|
+
D, [2010-07-31T07:37:35.831152 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
165
|
+
D, [2010-07-31T07:37:35.831317 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against "\r\nsouth\r\n\r\nYou are in a valley in the forest beside a stream tumbling along a\r\nrocky bed.\r\n"
|
|
166
|
+
D, [2010-07-31T07:37:35.831452 #16613] DEBUG -- : no match
|
|
167
|
+
D, [2010-07-31T07:37:35.831592 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
168
|
+
D, [2010-07-31T07:37:35.831763 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against "\r\nsouth\r\n\r\nYou are in a valley in the forest beside a stream tumbling along a\r\nrocky bed.\r\n"
|
|
169
|
+
D, [2010-07-31T07:37:35.831903 #16613] DEBUG -- : no match
|
|
170
|
+
D, [2010-07-31T07:37:35.832047 #16613] DEBUG -- : checking output against output matching /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./
|
|
171
|
+
D, [2010-07-31T07:37:35.832212 #16613] DEBUG -- : matching /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./ against "\r\nsouth\r\n\r\nYou are in a valley in the forest beside a stream tumbling along a\r\nrocky bed.\r\n"
|
|
172
|
+
D, [2010-07-31T07:37:35.832388 #16613] DEBUG -- : matched /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./
|
|
173
|
+
D, [2010-07-31T07:37:35.832528 #16613] DEBUG -- : match trigger output matching /You\s+are\s+in\s+a\s+valley\s+in\s+the\s+forest\s+beside\s+a\s+stream\s+tumbling\s+along\s+a\s+rocky\s+bed\./
|
|
174
|
+
D, [2010-07-31T07:37:35.832667 #16613] DEBUG -- : unblocked
|
|
175
|
+
D, [2010-07-31T07:37:35.832802 #16613] DEBUG -- : trigger removed
|
|
176
|
+
D, [2010-07-31T07:37:35.838590 #16613] DEBUG -- : added trigger on exit with status 0
|
|
177
|
+
D, [2010-07-31T07:37:35.838770 #16613] DEBUG -- : waiting for exit with status 0
|
|
178
|
+
D, [2010-07-31T07:37:35.838907 #16613] DEBUG -- : no match
|
|
179
|
+
D, [2010-07-31T07:37:35.839082 #16613] DEBUG -- : select()
|
|
180
|
+
D, [2010-07-31T07:37:35.839303 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
181
|
+
D, [2010-07-31T07:37:35.839493 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
182
|
+
D, [2010-07-31T07:37:35.839721 #16613] DEBUG -- :
|
|
183
|
+
>> quit
|
|
184
|
+
D, [2010-07-31T07:37:35.839865 #16613] DEBUG -- : wrote 5 bytes
|
|
185
|
+
D, [2010-07-31T07:37:35.839991 #16613] DEBUG -- : select()
|
|
186
|
+
D, [2010-07-31T07:37:35.840194 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
187
|
+
D, [2010-07-31T07:37:35.870399 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
188
|
+
D, [2010-07-31T07:37:35.870536 #16613] DEBUG -- :
|
|
189
|
+
<< quit
|
|
190
|
+
<<
|
|
191
|
+
<< Do you really want to quit now?
|
|
192
|
+
D, [2010-07-31T07:37:35.870575 #16613] DEBUG -- : read 41 bytes
|
|
193
|
+
D, [2010-07-31T07:37:35.870635 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
194
|
+
D, [2010-07-31T07:37:35.870681 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against "\r\nquit\r\n\r\nDo you really want to quit now?\r\n"
|
|
195
|
+
D, [2010-07-31T07:37:35.870716 #16613] DEBUG -- : no match
|
|
196
|
+
D, [2010-07-31T07:37:35.870752 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
197
|
+
D, [2010-07-31T07:37:35.870788 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against "\r\nquit\r\n\r\nDo you really want to quit now?\r\n"
|
|
198
|
+
D, [2010-07-31T07:37:35.870819 #16613] DEBUG -- : no match
|
|
199
|
+
D, [2010-07-31T07:37:35.870852 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
200
|
+
D, [2010-07-31T07:37:35.870886 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against "\r\nquit\r\n\r\nDo you really want to quit now?\r\n"
|
|
201
|
+
D, [2010-07-31T07:37:35.870931 #16613] DEBUG -- : matched /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
202
|
+
D, [2010-07-31T07:37:35.871096 #16613] DEBUG -- : match trigger output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
203
|
+
D, [2010-07-31T07:37:35.871211 #16613] DEBUG -- : select()
|
|
204
|
+
D, [2010-07-31T07:37:35.871352 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
205
|
+
D, [2010-07-31T07:37:35.871463 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
206
|
+
D, [2010-07-31T07:37:35.871595 #16613] DEBUG -- :
|
|
207
|
+
>> yes
|
|
208
|
+
D, [2010-07-31T07:37:35.871680 #16613] DEBUG -- : wrote 4 bytes
|
|
209
|
+
D, [2010-07-31T07:37:35.871756 #16613] DEBUG -- : select()
|
|
210
|
+
D, [2010-07-31T07:37:35.871871 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
211
|
+
D, [2010-07-31T07:37:35.890580 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
212
|
+
D, [2010-07-31T07:37:35.890819 #16613] DEBUG -- :
|
|
213
|
+
<< yes
|
|
214
|
+
<<
|
|
215
|
+
<< OK
|
|
216
|
+
<<
|
|
217
|
+
<<
|
|
218
|
+
<<
|
|
219
|
+
<< You scored 32 out of a possible 350 using 4 turns.
|
|
220
|
+
<<
|
|
221
|
+
<< You are obviously a rank amateur. Better luck next time.
|
|
222
|
+
<< To achieve the next higher rating, you need 4 more points.
|
|
223
|
+
<< __GREENLETTERS_PROCESS_ENDED__
|
|
224
|
+
D, [2010-07-31T07:37:35.890915 #16613] DEBUG -- : read 222 bytes
|
|
225
|
+
D, [2010-07-31T07:37:35.891038 #16613] DEBUG -- : checking output against output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
226
|
+
D, [2010-07-31T07:37:35.891156 #16613] DEBUG -- : matching /__GREENLETTERS_PROCESS_ENDED__/ against " now?\r\nyes\r\n\r\nOK\r\n\r\n\r\n\r\nYou scored 32 out of a possible 350 using 4 turns.\r\n\r\nYou are obviously a rank amateur. Better luck next time.\r\nTo achieve the next higher rating, you need 4 more points.\r\n__GREENLETTERS_PROCESS_ENDED__\r\n"
|
|
227
|
+
D, [2010-07-31T07:37:35.891252 #16613] DEBUG -- : matched /__GREENLETTERS_PROCESS_ENDED__/
|
|
228
|
+
D, [2010-07-31T07:37:35.891340 #16613] DEBUG -- : end marker found
|
|
229
|
+
D, [2010-07-31T07:37:35.891468 #16613] DEBUG -- : end marker expunged from output buffer
|
|
230
|
+
D, [2010-07-31T07:37:35.891551 #16613] DEBUG -- : acknowledging end marker
|
|
231
|
+
D, [2010-07-31T07:37:35.891650 #16613] DEBUG -- : match trigger output matching /__GREENLETTERS_PROCESS_ENDED__/
|
|
232
|
+
D, [2010-07-31T07:37:35.891740 #16613] DEBUG -- : checking output against output matching /Would\s+you\s+like\s+instructions\?/
|
|
233
|
+
D, [2010-07-31T07:37:35.891846 #16613] DEBUG -- : matching /Would\s+you\s+like\s+instructions\?/ against " now?\r\nyes\r\n\r\nOK\r\n\r\n\r\n\r\nYou scored 32 out of a possible 350 using 4 turns.\r\n\r\nYou are obviously a rank amateur. Better luck next time.\r\nTo achieve the next higher rating, you need 4 more points.\r\n"
|
|
234
|
+
D, [2010-07-31T07:37:35.891925 #16613] DEBUG -- : no match
|
|
235
|
+
D, [2010-07-31T07:37:35.892007 #16613] DEBUG -- : checking output against output matching /Do\s+you\s+really\s+want\s+to\s+quit/
|
|
236
|
+
D, [2010-07-31T07:37:35.892107 #16613] DEBUG -- : matching /Do\s+you\s+really\s+want\s+to\s+quit/ against " now?\r\nyes\r\n\r\nOK\r\n\r\n\r\n\r\nYou scored 32 out of a possible 350 using 4 turns.\r\n\r\nYou are obviously a rank amateur. Better luck next time.\r\nTo achieve the next higher rating, you need 4 more points.\r\n"
|
|
237
|
+
D, [2010-07-31T07:37:35.892184 #16613] DEBUG -- : no match
|
|
238
|
+
D, [2010-07-31T07:37:35.892267 #16613] DEBUG -- : flushing triggers matching Greenletters::OutputTrigger
|
|
239
|
+
D, [2010-07-31T07:37:35.892365 #16613] DEBUG -- : flushing triggers matching Greenletters::BytesTrigger
|
|
240
|
+
D, [2010-07-31T07:37:35.892447 #16613] DEBUG -- : select()
|
|
241
|
+
D, [2010-07-31T07:37:35.892581 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [#<File:/dev/pts/3>], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
242
|
+
D, [2010-07-31T07:37:35.892692 #16613] DEBUG -- : input ready #<File:/dev/pts/3>
|
|
243
|
+
D, [2010-07-31T07:37:35.892827 #16613] DEBUG -- :
|
|
244
|
+
|
|
245
|
+
D, [2010-07-31T07:37:35.892911 #16613] DEBUG -- : wrote 1 bytes
|
|
246
|
+
D, [2010-07-31T07:37:35.892988 #16613] DEBUG -- : select()
|
|
247
|
+
D, [2010-07-31T07:37:35.893100 #16613] DEBUG -- : select() on [[#<File:/dev/pts/3>], [], [#<File:/dev/pts/3>, #<File:/dev/pts/3>], 1.0]
|
|
248
|
+
D, [2010-07-31T07:37:35.900995 #16613] DEBUG -- : output ready #<File:/dev/pts/3>
|
|
249
|
+
D, [2010-07-31T07:37:35.670905 #16613] DEBUG -- :
|
|
250
|
+
<<
|
|
251
|
+
D, [2010-07-31T07:37:35.671079 #16613] DEBUG -- : read 2 bytes
|
|
252
|
+
D, [2010-07-31T07:37:35.671244 #16613] DEBUG -- : flushing triggers matching Greenletters::OutputTrigger
|
|
253
|
+
D, [2010-07-31T07:37:35.671384 #16613] DEBUG -- : flushing triggers matching Greenletters::BytesTrigger
|
|
254
|
+
D, [2010-07-31T07:37:35.671509 #16613] DEBUG -- : select()
|
|
255
|
+
D, [2010-07-31T07:37:35.671681 #16613] DEBUG -- : select() on [[#<File:/dev/pts/2>], [], [#<File:/dev/pts/2>, #<File:/dev/pts/2>], 1.0]
|
|
256
|
+
D, [2010-07-31T07:37:35.671835 #16613] DEBUG -- : output ready #<File:/dev/pts/2>
|
|
257
|
+
D, [2010-07-31T07:37:35.672236 #16613] DEBUG -- : Errno::EIO caught
|
|
258
|
+
D, [2010-07-31T07:37:35.672378 #16613] DEBUG -- : waiting for child 16615 to die
|
|
259
|
+
D, [2010-07-31T07:37:35.723882 #16613] DEBUG -- : caught PTY::ChildExited
|
|
260
|
+
D, [2010-07-31T07:37:35.724461 #16613] DEBUG -- : collecting remaining output
|
|
261
|
+
D, [2010-07-31T07:37:35.724849 #16613] DEBUG -- : Input/output error - /dev/pts/2
|
|
262
|
+
D, [2010-07-31T07:37:35.724989 #16613] DEBUG -- : handling exit of process 16615
|
|
263
|
+
D, [2010-07-31T07:37:35.725153 #16613] DEBUG -- : checking exit against exit with status 0
|
|
264
|
+
D, [2010-07-31T07:37:35.725323 #16613] DEBUG -- : match trigger exit with status 0
|
|
265
|
+
D, [2010-07-31T07:37:35.725445 #16613] DEBUG -- : unblocked
|
|
266
|
+
D, [2010-07-31T07:37:35.725571 #16613] DEBUG -- : trigger removed
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = "greenletters"
|
|
5
|
+
s.version = "0.2.0"
|
|
6
|
+
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
+
s.authors = ["Avdi Grimm"]
|
|
9
|
+
s.date = "2012-07-31"
|
|
10
|
+
s.description = " Greenletterrs is a console automation framework, similar to the classic\n utility Expect. You give it a command to execute, and tell it which outputs\n or events to expect and how to respond to them.\n\n Greenletters also includes a set of Cucumber steps which simplify the task\n of spcifying interactive command-line applications.\n"
|
|
11
|
+
s.email = "avdi@avdi.org"
|
|
12
|
+
s.executables = ["greenletters"]
|
|
13
|
+
s.extra_rdoc_files = ["History.txt", "bin/greenletters"]
|
|
14
|
+
s.files = [".gitignore", "Gemfile", "Gemfile.lock", "History.txt", "README.org", "Rakefile", "bin/greenletters", "examples/adventure.rb", "examples/cucumber/adventure.feature", "examples/cucumber/greenletters.log", "examples/cucumber/support/env.rb", "examples/greenletters.log", "greenletters.gemspec", "lib/greenletters.rb", "lib/greenletters/cucumber_steps.rb", "script/console", "spec/greenletters_spec.rb", "spec/spec_helper.rb", "version.txt"]
|
|
15
|
+
s.homepage = "http://github.com/avdi/greenletters"
|
|
16
|
+
s.rdoc_options = ["--main", "README.org"]
|
|
17
|
+
s.require_paths = ["lib"]
|
|
18
|
+
s.rubyforge_project = "greenletters"
|
|
19
|
+
s.rubygems_version = "1.8.10"
|
|
20
|
+
s.summary = "A Ruby console automation framework a la Expect"
|
|
21
|
+
|
|
22
|
+
if s.respond_to? :specification_version then
|
|
23
|
+
s.specification_version = 3
|
|
24
|
+
|
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
26
|
+
s.add_development_dependency(%q<bones>, [">= 3.8.0"])
|
|
27
|
+
else
|
|
28
|
+
s.add_dependency(%q<bones>, [">= 3.8.0"])
|
|
29
|
+
end
|
|
30
|
+
else
|
|
31
|
+
s.add_dependency(%q<bones>, [">= 3.8.0"])
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
require 'cucumber'
|
|
2
|
+
require 'shellwords'
|
|
2
3
|
|
|
3
4
|
module Greenletters
|
|
4
5
|
module CucumberHelpers
|
|
5
6
|
def greenletters_prepare_entry(text)
|
|
6
7
|
text.chomp + "\n"
|
|
7
8
|
end
|
|
9
|
+
|
|
8
10
|
def greenletters_massage_pattern(text)
|
|
9
11
|
Regexp.new(Regexp.escape(text.strip.tr_s(" \r\n\t", " ")).gsub('\ ', '\s+'))
|
|
10
12
|
end
|
|
13
|
+
|
|
14
|
+
# Override this in your Cucumber setup to customize how processes are
|
|
15
|
+
# constructed.
|
|
16
|
+
def make_greenletters_process(command_line, options = {})
|
|
17
|
+
command = Shellwords.shellwords(command_line)
|
|
18
|
+
options[:logger] = @greenletters_process_log if @greenletters_process_log
|
|
19
|
+
process_args = command + [options]
|
|
20
|
+
Greenletters::Process.new(*process_args)
|
|
21
|
+
end
|
|
11
22
|
end
|
|
12
23
|
end
|
|
13
24
|
|
|
@@ -20,7 +31,7 @@ Before do
|
|
|
20
31
|
end
|
|
21
32
|
|
|
22
33
|
Given /^process activity is logged to "([^\"]*)"$/ do |filename|
|
|
23
|
-
logger = ::Logger.new(open(filename, '
|
|
34
|
+
logger = ::Logger.new(open(filename, 'a+'))
|
|
24
35
|
#logger.level = ::Logger::INFO
|
|
25
36
|
logger.level = ::Logger::DEBUG
|
|
26
37
|
@greenletters_process_log = logger
|
|
@@ -28,10 +39,13 @@ end
|
|
|
28
39
|
|
|
29
40
|
Given /^a process (?:"([^\"]*)" )?from command "([^\"]*)"$/ do |name, command|
|
|
30
41
|
name ||= "default"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
@greenletters_process_table[name] = make_greenletters_process(command)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Given /^the process(?: "([^\"]*)")? has a timeout of ([0-9.]+) seconds$/ do
|
|
46
|
+
|name, length|
|
|
47
|
+
name ||= :"default"
|
|
48
|
+
@greenletters_process_table[name].timeout = length.to_f
|
|
35
49
|
end
|
|
36
50
|
|
|
37
51
|
Given /^I reply "([^\"]*)" to output "([^\"]*)"(?: from process "([^\"]*)")?$/ do
|
|
@@ -71,8 +85,9 @@ end
|
|
|
71
85
|
Then /^I should see the following output(?: from process "([^\"]*)")?:$/ do
|
|
72
86
|
|name, pattern|
|
|
73
87
|
name ||= "default"
|
|
88
|
+
process = @greenletters_process_table[name]
|
|
74
89
|
pattern = greenletters_massage_pattern(pattern)
|
|
75
|
-
|
|
90
|
+
process.wait_for(:output, pattern)
|
|
76
91
|
end
|
|
77
92
|
|
|
78
93
|
Then /^I should see all the following outputs(?: from process "([^\"]*)")?:$/ do
|
data/lib/greenletters.rb
CHANGED
|
@@ -103,7 +103,7 @@ module Greenletters
|
|
|
103
103
|
def <<(output)
|
|
104
104
|
@buffer << output
|
|
105
105
|
@transcript << output
|
|
106
|
-
length = [@buffer.length,
|
|
106
|
+
length = [@buffer.length, 512].min
|
|
107
107
|
@buffer = @buffer[-length, length]
|
|
108
108
|
self
|
|
109
109
|
end
|
|
@@ -128,7 +128,7 @@ module Greenletters
|
|
|
128
128
|
alias_method :exclusive?, :exclusive
|
|
129
129
|
|
|
130
130
|
def initialize(options={}, &block)
|
|
131
|
-
@block = block || lambda{}
|
|
131
|
+
@block = block || lambda{|*|}
|
|
132
132
|
@exclusive = options.fetch(:exclusive) { false }
|
|
133
133
|
@logger = ::Logger.new($stdout)
|
|
134
134
|
@interruption = :none
|
|
@@ -242,7 +242,7 @@ module Greenletters
|
|
|
242
242
|
end
|
|
243
243
|
|
|
244
244
|
def call(process)
|
|
245
|
-
if pattern === process.status.exitstatus
|
|
245
|
+
if process.status && pattern === process.status.exitstatus
|
|
246
246
|
@block.call(process, process.status)
|
|
247
247
|
true
|
|
248
248
|
else
|
|
@@ -267,17 +267,18 @@ module Greenletters
|
|
|
267
267
|
end
|
|
268
268
|
|
|
269
269
|
class Process
|
|
270
|
-
END_MARKER
|
|
271
|
-
DEFAULT_LOG_LEVEL
|
|
270
|
+
END_MARKER = '__GREENLETTERS_PROCESS_ENDED__'
|
|
271
|
+
DEFAULT_LOG_LEVEL = ::Logger::WARN
|
|
272
|
+
DEFAULT_TIMEOUT = 1.0
|
|
272
273
|
|
|
273
274
|
# Shamelessly stolen from Rake
|
|
274
275
|
RUBY_EXT =
|
|
275
|
-
((
|
|
276
|
+
((RbConfig::CONFIG['ruby_install_name'] =~ /\.(com|cmd|exe|bat|rb|sh)$/) ?
|
|
276
277
|
"" :
|
|
277
|
-
|
|
278
|
+
RbConfig::CONFIG['EXEEXT'])
|
|
278
279
|
RUBY = File.join(
|
|
279
|
-
|
|
280
|
-
|
|
280
|
+
RbConfig::CONFIG['bindir'],
|
|
281
|
+
RbConfig::CONFIG['ruby_install_name'] + RUBY_EXT).
|
|
281
282
|
sub(/.*\s.*/m, '"\&"')
|
|
282
283
|
|
|
283
284
|
extend Forwardable
|
|
@@ -289,6 +290,10 @@ module Greenletters
|
|
|
289
290
|
attr_reader :output_buffer # Output ready to be read from process
|
|
290
291
|
attr_reader :status # :not_started -> :running -> :ended -> :exited
|
|
291
292
|
attr_reader :cwd # Working directory for the command
|
|
293
|
+
attr_reader :input
|
|
294
|
+
attr_reader :output
|
|
295
|
+
attr_reader :pid
|
|
296
|
+
attr_accessor :timeout
|
|
292
297
|
|
|
293
298
|
def_delegators :input_buffer, :puts, :write, :print, :printf, :<<
|
|
294
299
|
def_delegators :output_buffer, :rest, :rest_size, :check_until
|
|
@@ -318,6 +323,7 @@ module Greenletters
|
|
|
318
323
|
t
|
|
319
324
|
}
|
|
320
325
|
@history = TranscriptHistoryBuffer.new(@transcript)
|
|
326
|
+
@timeout = options.fetch(:timeout) { DEFAULT_TIMEOUT }
|
|
321
327
|
end
|
|
322
328
|
|
|
323
329
|
def on(event, *args, &block)
|
|
@@ -327,6 +333,7 @@ module Greenletters
|
|
|
327
333
|
def wait_for(event, *args, &block)
|
|
328
334
|
raise "Already waiting for #{blocker}" if blocker
|
|
329
335
|
t = add_blocking_trigger(event, *args, &block)
|
|
336
|
+
@logger.debug "Entering wait cycle for #{event}"
|
|
330
337
|
process_events
|
|
331
338
|
rescue
|
|
332
339
|
unblock!
|
|
@@ -376,11 +383,10 @@ module Greenletters
|
|
|
376
383
|
cmd = wrapped_command
|
|
377
384
|
@logger.debug "executing #{cmd.join(' ')}"
|
|
378
385
|
merge_environment(@env) do
|
|
379
|
-
@logger.debug "command environment:\n#{ENV.inspect}"
|
|
380
386
|
@output, @input, @pid = PTY.spawn(*cmd)
|
|
381
387
|
end
|
|
382
388
|
@state = :running
|
|
383
|
-
@logger.debug "spawned pid #{@pid}"
|
|
389
|
+
@logger.debug "spawned pid #{@pid}; in: #{@input.inspect}; out: #{@output.inspect}"
|
|
384
390
|
end
|
|
385
391
|
end
|
|
386
392
|
|
|
@@ -389,6 +395,12 @@ module Greenletters
|
|
|
389
395
|
@output_buffer.terminate
|
|
390
396
|
end
|
|
391
397
|
|
|
398
|
+
def kill!(signal="TERM")
|
|
399
|
+
handle_child_exit do
|
|
400
|
+
::Process.kill(signal, @pid)
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
|
|
392
404
|
def alive?
|
|
393
405
|
::Process.kill(0, @pid)
|
|
394
406
|
true
|
|
@@ -421,6 +433,10 @@ module Greenletters
|
|
|
421
433
|
Time.now
|
|
422
434
|
end
|
|
423
435
|
|
|
436
|
+
def to_s
|
|
437
|
+
"Process<pid: #{pid}; in: #{input.inspect}; out: #{output.inspect}>"
|
|
438
|
+
end
|
|
439
|
+
|
|
424
440
|
private
|
|
425
441
|
|
|
426
442
|
attr_reader :triggers
|
|
@@ -439,14 +455,15 @@ module Greenletters
|
|
|
439
455
|
raise StateError, "Process not started!" if not_started?
|
|
440
456
|
handle_child_exit do
|
|
441
457
|
while blocked?
|
|
442
|
-
@logger.debug "select()"
|
|
443
458
|
input_handles = input_buffer.string.empty? ? [] : [@input]
|
|
444
459
|
output_handles = [@output]
|
|
445
|
-
error_handles = [@input, @output]
|
|
460
|
+
error_handles = [@input, @output].uniq
|
|
446
461
|
timeout = shortest_timeout
|
|
447
462
|
@logger.debug "select() on #{[output_handles, input_handles, error_handles, timeout].inspect}"
|
|
463
|
+
|
|
448
464
|
ready_handles = IO.select(
|
|
449
465
|
output_handles, input_handles, error_handles, timeout)
|
|
466
|
+
|
|
450
467
|
if ready_handles.nil?
|
|
451
468
|
process_timeout
|
|
452
469
|
else
|
|
@@ -625,13 +642,14 @@ module Greenletters
|
|
|
625
642
|
raise SystemError,
|
|
626
643
|
"Interrupted (#{reason}) while waiting for #{blocker}.\n" \
|
|
627
644
|
"Recent activity:\n" +
|
|
628
|
-
@history.buffer
|
|
645
|
+
@history.buffer + "\n" + ("-" * 60) + "\n"
|
|
629
646
|
end
|
|
630
647
|
unblock!
|
|
631
648
|
end
|
|
632
649
|
end
|
|
633
650
|
|
|
634
651
|
def catchup_trigger!(trigger)
|
|
652
|
+
@logger.debug "Catching up trigger #{trigger}"
|
|
635
653
|
check_trigger(trigger)
|
|
636
654
|
end
|
|
637
655
|
|
|
@@ -647,7 +665,7 @@ module Greenletters
|
|
|
647
665
|
result = triggers.grep(TimeoutTrigger).map{|t|
|
|
648
666
|
t.expiration_time - Time.now
|
|
649
667
|
}.min
|
|
650
|
-
if result.nil? then result =
|
|
668
|
+
if result.nil? then result = @timeout end
|
|
651
669
|
if result < 0 then result = 0 end
|
|
652
670
|
result
|
|
653
671
|
end
|
|
@@ -655,4 +673,3 @@ module Greenletters
|
|
|
655
673
|
end
|
|
656
674
|
|
|
657
675
|
Greenletters.require_all_libs_relative_to(__FILE__)
|
|
658
|
-
|
data/spec/greenletters_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -1,15 +1,4 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib greenletters]))
|
|
1
2
|
|
|
2
|
-
|
|
3
|
-
File.join(File.dirname(__FILE__), %w[.. lib greenletters]))
|
|
4
|
-
|
|
5
|
-
Spec::Runner.configure do |config|
|
|
6
|
-
# == Mock Framework
|
|
7
|
-
#
|
|
8
|
-
# RSpec uses it's own mocking framework by default. If you prefer to
|
|
9
|
-
# use mocha, flexmock or RR, uncomment the appropriate line:
|
|
10
|
-
#
|
|
11
|
-
# config.mock_with :mocha
|
|
12
|
-
# config.mock_with :flexmock
|
|
13
|
-
# config.mock_with :rr
|
|
3
|
+
RSpec.configure do |config|
|
|
14
4
|
end
|
|
15
|
-
|
data/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.0
|