dde 0.2.2 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,39 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/app_shared')
2
3
 
3
4
  module DDETest
4
5
 
6
+ def start_callback_recorder
7
+ @client_calls = []
8
+ @server_calls = []
9
+ @client = DDE::Client.new {|*args| @client_calls << extract_values(*args); 1}
10
+ @server = DDE::Server.new do |*args|
11
+ @server_calls << extract_values(*args)
12
+ #puts "#{Time.now.strftime('%T.%6N')} #{extract_values(*args)}"
13
+ DDE_FACK
14
+ end
15
+ @server.start_service('service')
16
+ end
17
+
18
+ def stop_callback_recorder
19
+ @client.stop_conversation if @client.conversation_active?
20
+ #@client.stop_dde if @client.dde_active?
21
+ @server.stop_service if @server.service_active?
22
+ @server.stop_dde if @server.dde_active?
23
+ end
24
+
25
+ def extract_values(type, format, conv, hsz1, hsz2, data, data1, data2)
26
+ [Win::DDE::TYPES[type], format, conv,
27
+ dde_query_string(@client.id, hsz1),
28
+ dde_query_string(@client.id, hsz2),
29
+ data, data1, data2]
30
+ end
31
+
5
32
  describe DDE::Client do
6
- # before(:all){@monitor = DDE::Monitor.new}
7
- # after(:all){@monitor.stop_dde}
33
+ before(:each){ @client = DDE::Client.new }
34
+ after(:each){ @client.stop_dde if @client.dde_active?}
8
35
 
9
- before(:each ){ @client = DDE::Client.new }
10
- # after(:each ){ @client.stop_dde}
36
+ it_should_behave_like "DDE App"
11
37
 
12
38
  it 'new without parameters creates Client but does not activate DDEML' do
13
39
  @client.id.should == nil
@@ -19,14 +45,14 @@ module DDETest
19
45
  end
20
46
 
21
47
  it 'new with attached callback block creates Client and activates DDEML' do
22
- client = DDE::Client.new {|*args|}
23
- client.id.should be_an Integer
24
- client.id.should_not == 0
25
- client.dde_active?.should == true
26
- client.conversation.should == nil
27
- client.conversation_active?.should == false
28
- client.service.should == nil
29
- client.topic.should == nil
48
+ @client = DDE::Client.new {|*args|}
49
+ @client.id.should be_an Integer
50
+ @client.id.should_not == 0
51
+ @client.dde_active?.should == true
52
+ @client.conversation.should == nil
53
+ @client.conversation_active?.should == false
54
+ @client.service.should == nil
55
+ @client.topic.should == nil
30
56
  end
31
57
 
32
58
  describe '#start_conversation' do
@@ -43,14 +69,13 @@ module DDETest
43
69
  should raise_error /DDE is not initialized/
44
70
  @client.conversation_active?.should == false
45
71
  end
46
- end
72
+ end # context 'with inactive (uninitialized) DDE:'
47
73
 
48
74
  context 'with active (initialized) DDE AND existing DDE server supporting "service" topic' do
49
- before(:each )do
50
- @client_calls = []
51
- @server_calls = []
52
- @client = DDE::Client.new {|*args| @client_calls << args; 1}
53
- @server = DDE::Server.new {|*args| @server_calls << args; 1}.start_service('service')
75
+ before(:each ){start_callback_recorder}
76
+ after(:each )do
77
+ stop_callback_recorder
78
+ #p @server_calls, @client_calls # ?????????? No XTYP_DISCONNECT ? Why ?
54
79
  end
55
80
 
56
81
  it 'starts new conversation if DDE is already activated' do
@@ -78,23 +103,24 @@ module DDETest
78
103
  it 'initiates XTYP_CONNECT transaction to service`s callback' do
79
104
  @client.start_conversation 'service', 'topic'
80
105
 
81
- @server_calls.first[0].should == XTYP_CONNECT
82
- @server_calls.first[3].should == @client.topic.handle
83
- @server_calls.first[4].should == @client.service.handle
106
+ @server_calls.first[0].should == 'XTYP_CONNECT'
107
+ @server_calls.first[3].should == @client.topic
108
+ @server_calls.first[4].should == @client.service
84
109
  end
85
110
 
86
111
  it 'if server confirms connect, XTYP_CONNECT_CONFIRM transaction to service`s callback follows' do
87
112
  @client.start_conversation 'service', 'topic'
88
113
 
89
- @server_calls[1][0].should == XTYP_CONNECT_CONFIRM
90
- @server_calls[1][3].should == @client.topic.handle
91
- @server_calls[1][4].should == @client.service.handle
114
+ # p @server_calls, @client_calls # ?????????? No XTYP_DISCONNECT ? Why ?
115
+ @server_calls[1][0].should == 'XTYP_CONNECT_CONFIRM'
116
+ @server_calls[1][3].should == @client.topic
117
+ @server_calls[1][4].should == @client.service
92
118
  end
93
119
 
94
120
  it 'client`s callback receives no transactions' do
95
121
  @client.start_conversation 'service', 'topic'
96
122
 
97
- p @server_calls, @client.service.handle, @client.topic.handle, @client.conversation
123
+ #p @server_calls, @client.service.handle, @client.topic.handle, @client.conversation
98
124
  @client_calls.should == []
99
125
  end
100
126
 
@@ -109,10 +135,14 @@ module DDETest
109
135
  lambda{@client.start_conversation('not_a_service', 'topic')}.
110
136
  should raise_error /A client`s attempt to establish a conversation has failed/
111
137
  @client.conversation_active?.should == false
138
+
139
+ #ensure
140
+ dde_free_string_handle(@client.id, @client.topic.handle)
141
+ dde_free_string_handle(@client.id, @client.service.handle)
112
142
  end
113
143
 
114
- end
115
- end
144
+ end # context 'with active (initialized) DDE AND existing DDE server supporting "service" topic' do
145
+ end # describe '#start_conversation'
116
146
 
117
147
  describe '#stop_conversation' do
118
148
 
@@ -123,15 +153,12 @@ module DDETest
123
153
  @client.conversation_active?.should == false
124
154
  end
125
155
 
126
- end
156
+ end # context 'with inactive (uninitialized) DDE:'
127
157
 
128
158
  context 'with active (initialized) DDE AND existing DDE server supporting "service" topic' do
129
- before(:each )do
130
- @client_calls = []
131
- @server_calls = []
132
- @client = DDE::Client.new {|*args| @client_calls << args; 1}
133
- @server = DDE::Server.new {|*args| @server_calls << args; 1}
134
- @server.start_service('service')
159
+ before(:each ){start_callback_recorder}
160
+ after(:each )do
161
+ stop_callback_recorder
135
162
  end
136
163
 
137
164
  it 'fails to stop conversation' do
@@ -141,7 +168,8 @@ module DDETest
141
168
  end
142
169
 
143
170
  context 'conversation already started' do
144
- before(:each ){@client.start_conversation 'service', 'topic'}
171
+ before(:each){ @client.start_conversation 'service', 'topic' }
172
+ after(:each){ @client.stop_conversation if @client.conversation_active?}
145
173
 
146
174
  it 'stops conversation' do
147
175
  res = @client.stop_conversation
@@ -165,12 +193,12 @@ module DDETest
165
193
  pending
166
194
  @client.stop_conversation
167
195
  p @server_calls, @client_calls # ?????????? No XTYP_DISCONNECT ? Why ?
168
- @server_calls.last[0].should == XTYP_DISCONNECT
196
+ @server_calls.last[0].should == 'XTYP_DISCONNECT'
169
197
  end
170
198
 
171
- end
199
+ end # context 'conversation already started'
172
200
 
173
- end
174
- end
175
- end
201
+ end # context 'with active (initialized) DDE AND existing DDE server supporting "service" topic'
202
+ end # describe '#stop_conversation'
203
+ end # describe DDE::Client
176
204
  end
@@ -1,16 +1,29 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/app_shared')
2
3
 
3
4
  module DDETest
4
5
 
5
6
  describe DDE::Monitor do
6
- after(:each){@monitor.stop_dde}
7
-
7
+ before(:each){ @monitor = DDE::Monitor.new }
8
+ after(:each){ @monitor.stop_dde }
9
+
10
+ it_should_behave_like "DDE App"
11
+
8
12
  it 'starts without constructor parameters' do
9
13
  @monitor = DDE::Monitor.new
10
14
 
11
15
  @monitor.id.should be_an Integer
12
16
  @monitor.id.should_not == 0
13
17
  @monitor.dde_active?.should == true
18
+
19
+ @monitor.init_flags.should == APPCLASS_MONITOR | # this is monitor
20
+ MF_CALLBACKS | # monitor callback functions
21
+ MF_CONV | # monitor conversation data
22
+ MF_ERRORS | # monitor DDEML errors
23
+ MF_HSZ_INFO | # monitor data handle activity
24
+ MF_LINKS | # monitor advise loops
25
+ MF_POSTMSGS | # monitor posted DDE messages
26
+ MF_SENDMSGS # monitor sent DDE messages
14
27
  end
15
28
 
16
29
  # context 'with existing DDE clients and server supporting "service" topic' do
@@ -1,5 +1,10 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/app_shared')
2
+
1
3
  module DDETest
2
4
  shared_examples_for "DDE Server" do
5
+
6
+ it_should_behave_like "DDE App"
7
+
3
8
  it 'new without parameters creates Server but does not activate DDEML or start service' do
4
9
  @server.id.should == nil
5
10
  @server.service.should == nil
@@ -8,12 +13,12 @@ module DDETest
8
13
  end
9
14
 
10
15
  it 'new with attached callback block creates Server and activates DDEML, but does not start service' do
11
- server = described_class.new {|*args|}
12
- server.id.should be_an Integer
13
- server.id.should_not == 0
14
- server.dde_active?.should == true
15
- server.service.should == nil
16
- server.service_active?.should == false
16
+ @server = described_class.new {|*args|}
17
+ @server.id.should be_an Integer
18
+ @server.id.should_not == 0
19
+ @server.dde_active?.should == true
20
+ @server.service.should == nil
21
+ @server.service_active?.should == false
17
22
  end
18
23
 
19
24
  describe '#start_service' do
@@ -35,11 +40,6 @@ module DDETest
35
40
  res.should == @server
36
41
  end
37
42
 
38
- it 'fails to start new service without callback block' do
39
- lambda{@server.start_service('myservice')}.should raise_error DDE::Errors::ServiceError
40
- @server.service_active?.should == false
41
- end
42
-
43
43
  end
44
44
 
45
45
  context 'with active (initialized) DDE:' do
@@ -77,6 +77,7 @@ module DDETest
77
77
 
78
78
  context 'with already registered DDE service: "myservice"' do
79
79
  before(:each){ @server.start_service('myservice')}
80
+ after(:each){ @server.stop_service if @server.service_active?}
80
81
 
81
82
  it 'stops previously registered service' do
82
83
  @server.stop_service.should be_true
@@ -5,6 +5,10 @@ module DDETest
5
5
 
6
6
  describe DDE::Server do
7
7
  before(:each ){ @server = DDE::Server.new }
8
+ after(:each) do
9
+ @server.stop_service if @server.service_active?
10
+ @server.stop_dde if @server.dde_active?
11
+ end
8
12
 
9
13
  it_should_behave_like "DDE Server"
10
14
 
@@ -14,8 +18,13 @@ module DDETest
14
18
  expect{@server.start_dde{|*args|}.start_service}.to raise_error ArgumentError, /0 for 1/
15
19
  expect{@server.start_service {|*args|}}.to raise_error ArgumentError, /0 for 1/
16
20
  end
17
- end
18
21
 
22
+ it 'callback block should be given explicitly' do
23
+ lambda{@server.start_service('myservice')}.should raise_error DDE::Errors::ServiceError
24
+ @server.service_active?.should == false
25
+ end
26
+
27
+ end
19
28
 
20
29
  end
21
30
  end
@@ -5,6 +5,10 @@ module DDETest
5
5
 
6
6
  describe DDE::XlServer do
7
7
  before(:each ){ @server = DDE::XlServer.new }
8
+ after(:each) do
9
+ @server.stop_service if @server.service_active?
10
+ @server.stop_dde if @server.dde_active?
11
+ end
8
12
 
9
13
  it_should_behave_like "DDE Server"
10
14
 
@@ -31,7 +35,14 @@ module DDETest
31
35
  @server.service.handle.should_not == 0
32
36
  @server.service_active?.should == true
33
37
  end
38
+
39
+ it 'starts new service with default callback block' do
40
+ @server.start_service('myservice1')
41
+ @server.service_active?.should == true
42
+ @server.service.name.should == 'myservice1'
43
+ end
34
44
  end
45
+
35
46
  context 'with active (initialized) DDE:' do
36
47
  before(:each ){ @server = DDE::XlServer.new {|*args|}}
37
48
 
@@ -6,7 +6,7 @@ module DDETest
6
6
  it 'starts out empty and without item/topic' do
7
7
  table = DDE::XlTable.new
8
8
  table.should be_empty
9
- table.buf.should == nil
9
+ table.topic.should == nil
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dde
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - arvicco
@@ -9,18 +9,18 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-26 00:00:00 +03:00
12
+ date: 2010-03-17 00:00:00 +03:00
13
13
  default_executable: dde_main
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: win_gui
16
+ name: win
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.1.0
23
+ version: 0.1.26
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
@@ -64,8 +64,11 @@ files:
64
64
  - doc/dde_formats.doc
65
65
  - doc/ddeml.d.txt
66
66
  - doc/types.txt
67
- - doc/~$Table_format.doc
68
- - doc/~$e_formats.doc
67
+ - exp/exp_client.rb
68
+ - exp/exp_dde_monitor.rb
69
+ - exp/exp_dde_server.rb
70
+ - exp/exp_lib.rb
71
+ - exp/exp_server.rb
69
72
  - features/dde.feature
70
73
  - features/step_definitions/dde_steps.rb
71
74
  - features/support/env.rb
@@ -77,6 +80,7 @@ files:
77
80
  - lib/dde/server.rb
78
81
  - lib/dde/xl_server.rb
79
82
  - lib/dde/xl_table.rb
83
+ - spec/dde/app_shared.rb
80
84
  - spec/dde/app_spec.rb
81
85
  - spec/dde/client_spec.rb
82
86
  - spec/dde/dde_string_spec.rb
@@ -116,6 +120,7 @@ signing_key:
116
120
  specification_version: 3
117
121
  summary: DDE server for Ruby
118
122
  test_files:
123
+ - spec/dde/app_shared.rb
119
124
  - spec/dde/app_spec.rb
120
125
  - spec/dde/client_spec.rb
121
126
  - spec/dde/dde_string_spec.rb
Binary file
data/doc/~$e_formats.doc DELETED
Binary file