greenletters 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|