cucumber-messages 16.0.1 → 17.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require 'cucumber/messages/ndjson_to_message_enumerator'
2
2
  require 'cucumber/messages/time_conversion'
3
3
  require 'cucumber/messages/id_generator'
4
+ require 'cucumber/messages.deserializers'
4
5
 
5
6
  module Cucumber
6
7
  module Messages
@@ -0,0 +1,27 @@
1
+ require 'json'
2
+ require 'cucumber/messages'
3
+
4
+ module Cucumber
5
+ module Messages
6
+ describe 'messages acdeptance tests' do
7
+ # TODO: Remove '/minimal' from the glob
8
+ Dir["#{File.dirname(__FILE__)}/../../../../../compatibility-kit/javascript/features/**/*.ndjson"].each do |ndjson_file|
9
+ it "deserialises and serialises messages in #{ndjson_file}" do
10
+ File.open(ndjson_file, 'r:utf-8') do |io|
11
+ io.each_line do |json|
12
+ check(json)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def check(json)
19
+ hash = JSON.parse(json)
20
+ envelope = Envelope.from_json(json)
21
+ new_json = envelope.to_json
22
+ new_hash = JSON.parse(new_json)
23
+ expect(new_hash).to eq(hash)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ require 'rspec'
2
+ require 'cucumber/messages/message/dummy_messages'
3
+
4
+ describe Cucumber::Messages::Message::Deserialization do
5
+ describe '#from_json' do
6
+ subject { Cucumber::Messages::Message.from_json(json_document) }
7
+
8
+ let(:json_document) { '' }
9
+
10
+ context 'with a valid JSON document' do
11
+ let(:json_document) { '{"simpleMessage":{"isString":"answer"}}' }
12
+
13
+ it 'deserialize the message using #from_h' do
14
+ allow(Cucumber::Messages::Message).to receive(:from_h)
15
+
16
+ subject
17
+
18
+ expect(Cucumber::Messages::Message)
19
+ .to have_received(:from_h)
20
+ .with({ simpleMessage: { isString: "answer" } })
21
+ end
22
+ end
23
+
24
+ context 'with an invalid JSON document' do
25
+ let(:json_document) { '{foo: bar}' }
26
+
27
+ it { expect { subject }.to raise_error(JSON::ParserError) }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,38 @@
1
+ require 'cucumber/messages/message'
2
+
3
+ module Cucumber::Messages
4
+ class SimpleMessage < Message
5
+ attr_reader :is_nil, :is_string, :is_array, :is_number
6
+
7
+ def initialize(is_nil: nil, is_string: '', is_array: [], is_number: 0)
8
+ @is_nil = is_nil
9
+ @is_string = is_string
10
+ @is_array = is_array
11
+ @is_number = is_number
12
+ end
13
+ end
14
+
15
+ class EnumMessage
16
+ ENUM = 'an enum'
17
+ end
18
+
19
+ class ComprehensiveMessage < Message
20
+ attr_reader :simple_message, :message_array, :is_enum
21
+
22
+ def initialize(
23
+ simple_message: SimpleMessage.new,
24
+ message_array: [SimpleMessage.new, SimpleMessage.new],
25
+ is_enum: EnumMessage::ENUM
26
+ )
27
+ @simple_message = simple_message
28
+ @message_array = message_array
29
+ @is_enum = is_enum
30
+ end
31
+
32
+ private
33
+
34
+ def self.message_array_from_h(hash)
35
+ SimpleMessage.from_h(hash)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,89 @@
1
+ require 'rspec'
2
+ require 'cucumber/messages/message/dummy_messages'
3
+
4
+ describe Cucumber::Messages::Message::Serialization do
5
+ context 'with a simple message' do
6
+ describe '#to_h' do
7
+ subject { Cucumber::Messages::SimpleMessage.new.to_h }
8
+
9
+ it 'returns a Hash with all the attributes of the Message' do
10
+ expect(subject).to eq({ is_nil: nil, is_string: '', is_array: [], is_number: 0 })
11
+ end
12
+
13
+ context 'whith camelize: true' do
14
+ subject { Cucumber::Messages::SimpleMessage.new.to_h(camelize: true) }
15
+
16
+ it 'camelize the keys of the resulting hash' do
17
+ expect(subject).to eq({ isNil: nil, isString: '', isArray: [], isNumber: 0 })
18
+ end
19
+ end
20
+
21
+ context 'with reject_nil_values: true' do
22
+ subject { Cucumber::Messages::SimpleMessage.new.to_h(reject_nil_values: true) }
23
+
24
+ it 'rejects nil values from the resulting hash' do
25
+ expect(subject).to eq({ is_string: '', is_array: [], is_number: 0 })
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#to_json' do
31
+ subject { Cucumber::Messages::SimpleMessage.new.to_json }
32
+
33
+ it 'returns a JSON document with all the attributes of the Message except nil values' do
34
+ expect(subject).to eq({ isString: '', isArray: [], isNumber: 0 }.to_json)
35
+ end
36
+ end
37
+ end
38
+
39
+ context 'with a message which embeds other messages' do
40
+ describe '#to_h' do
41
+ subject { Cucumber::Messages::ComprehensiveMessage.new.to_h }
42
+
43
+ it 'includes hash representation of embedded messages' do
44
+ expect(subject[:simple_message]).to eq({ is_nil: nil, is_string: '', is_array: [], is_number: 0 })
45
+ expect(subject[:is_enum]).to eq 'an enum'
46
+ end
47
+
48
+ it 'includes hash representation of messages arrays' do
49
+ expect(subject[:message_array]).to eq([
50
+ { is_nil: nil, is_string: '', is_array: [], is_number: 0 },
51
+ { is_nil: nil, is_string: '', is_array: [], is_number: 0 }
52
+ ])
53
+ end
54
+
55
+ context 'whith camelize: true' do
56
+ subject { Cucumber::Messages::ComprehensiveMessage.new.to_h(camelize: true) }
57
+
58
+ it 'camelize the keys of the embedded messages resulting hashes' do
59
+ expect(subject[:simpleMessage]).to eq({ isNil: nil, isString: '', isArray: [], isNumber: 0 })
60
+ end
61
+
62
+ it 'camelize the keys of hashes for messages arrays' do
63
+ expect(subject[:messageArray]).to eq([
64
+ { isNil: nil, isString: '', isArray: [], isNumber: 0 },
65
+ { isNil: nil, isString: '', isArray: [], isNumber: 0 }
66
+ ])
67
+ end
68
+ end
69
+ end
70
+
71
+ describe '#to_json' do
72
+ subject { Cucumber::Messages::ComprehensiveMessage.new.to_json }
73
+
74
+ it 'returns a JSON document with embedded messages' do
75
+ expect(subject).to include({ isString: '', isArray: [], isNumber: 0}.to_json)
76
+ expect(subject).to include('"isEnum":"an enum"')
77
+ end
78
+
79
+ it 'returns a JSON document with messages arrays' do
80
+ expect(subject).to include(
81
+ [
82
+ { isString: '', isArray: [], isNumber: 0},
83
+ { isString: '', isArray: [], isNumber: 0}
84
+ ].to_json
85
+ )
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,30 @@
1
+ require 'rspec'
2
+ require 'cucumber/messages/message/utils'
3
+
4
+ class DummyTestClass
5
+ include Cucumber::Messages::Message::Utils
6
+ end
7
+
8
+ describe Cucumber::Messages::Message::Utils do
9
+ subject { DummyTestClass }
10
+
11
+ describe '#underscore' do
12
+ it { expect(subject.underscore('test')).to eq 'test' }
13
+ it { expect(subject.underscore('testTest')).to eq 'test_test' }
14
+ it { expect(subject.underscore('')).to eq '' }
15
+ it { expect(subject.underscore('T')).to eq 't' }
16
+ it { expect(subject.underscore('test123test456Test')).to eq 'test123test456_test' }
17
+ it { expect(subject.underscore('test-test')).to eq 'test_test' }
18
+ it { expect(subject.underscore('TEST_Test')).to eq 'test_test' }
19
+ it { expect(subject.underscore('test-Test')).to eq 'test_test' }
20
+ end
21
+
22
+ describe '#camelize' do
23
+ it { expect(subject.camelize('test')).to eq 'test' }
24
+ it { expect(subject.camelize('test_test')).to eq 'testTest' }
25
+ it { expect(subject.camelize('Test_TeSt')).to eq 'TestTest' }
26
+ it { expect(subject.camelize('')).to eq '' }
27
+ it { expect(subject.camelize('test123test4_5_6_test')).to eq 'test123test456Test' }
28
+ it { expect(subject.camelize('test-test')).to eq 'test-test' }
29
+ end
30
+ end
@@ -3,27 +3,28 @@ require 'cucumber/messages'
3
3
  module Cucumber
4
4
  module Messages
5
5
  describe 'messages' do
6
- it "can be serialised over an ndjson stream" do
7
- outgoing_messages = [
8
- {'source' => {'data' => 'Feature: Hello'}},
9
- {'attachment' => {'binary' => [1,2,3,4].pack('C*')}}
6
+ let(:outgoing_messages) do
7
+ [
8
+ Envelope.new(
9
+ source: Source.new(data: 'Feature: Hello')
10
+ ),
11
+ Envelope.new(
12
+ attachment: Attachment.new(body: 'Hello', content_encoding: AttachmentContentEncoding::IDENTITY)
13
+ )
10
14
  ]
15
+ end
11
16
 
17
+ it "can be serialised over an ndjson stream" do
12
18
  io = StringIO.new
13
19
  write_outgoing_messages(outgoing_messages, io)
14
20
 
15
21
  io.rewind
16
22
  incoming_messages = NdjsonToMessageEnumerator.new(io)
17
23
 
18
- expect(incoming_messages.to_a).to(eq(outgoing_messages))
24
+ expect(incoming_messages.to_a.map(&:to_h)).to(eq(outgoing_messages.map(&:to_h)))
19
25
  end
20
26
 
21
27
  it "ignores empty lines" do
22
- outgoing_messages = [
23
- {'source' => {'data' => 'Feature: Hello'}},
24
- {'attachment' => {'binary' => [1,2,3,4].pack('C*')}}
25
- ]
26
-
27
28
  io = StringIO.new
28
29
  write_outgoing_messages(outgoing_messages, io)
29
30
  io.write("\n\n")
@@ -31,7 +32,7 @@ module Cucumber
31
32
  io.rewind
32
33
  incoming_messages = NdjsonToMessageEnumerator.new(io)
33
34
 
34
- expect(incoming_messages.to_a).to(eq(outgoing_messages))
35
+ expect(incoming_messages.to_a.map(&:to_h)).to(eq(outgoing_messages.map(&:to_h)))
35
36
  end
36
37
 
37
38
  it "includes offending line in error message" do
@@ -28,6 +28,14 @@ module Cucumber
28
28
 
29
29
  expect(duration_in_seconds_again).to be_within(0.000000001).of(duration_in_seconds)
30
30
  end
31
+
32
+ it 'converts to a hash where seconds and nanos are integers' do
33
+ duration_in_seconds = 3.000161
34
+ duration = seconds_to_duration(duration_in_seconds)
35
+
36
+ expect(duration['seconds']).to be_integer
37
+ expect(duration['nanos']).to be_integer
38
+ end
31
39
  end
32
40
  end
33
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-messages
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.0.1
4
+ version: 17.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-24 00:00:00.000000000 Z
11
+ date: 2021-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '13.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 13.0.3
22
+ version: 13.0.6
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '13.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 13.0.3
32
+ version: 13.0.6
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rspec
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -59,12 +59,23 @@ files:
59
59
  - LICENSE
60
60
  - README.md
61
61
  - VERSION
62
+ - lib/cucumber/messages.deserializers.rb
63
+ - lib/cucumber/messages.dtos.rb
62
64
  - lib/cucumber/messages.rb
63
65
  - lib/cucumber/messages/id_generator.rb
66
+ - lib/cucumber/messages/message.rb
67
+ - lib/cucumber/messages/message/deserialization.rb
68
+ - lib/cucumber/messages/message/serialization.rb
69
+ - lib/cucumber/messages/message/utils.rb
64
70
  - lib/cucumber/messages/ndjson_to_message_enumerator.rb
65
71
  - lib/cucumber/messages/time_conversion.rb
66
72
  - spec/capture_warnings.rb
73
+ - spec/cucumber/messages/acceptance_spec.rb
67
74
  - spec/cucumber/messages/id_generator_spec.rb
75
+ - spec/cucumber/messages/message/deserialization_spec.rb
76
+ - spec/cucumber/messages/message/dummy_messages.rb
77
+ - spec/cucumber/messages/message/serialization_spec.rb
78
+ - spec/cucumber/messages/message/utils_spec.rb
68
79
  - spec/cucumber/messages/ndjson_serialization_spec.rb
69
80
  - spec/cucumber/messages/time_conversion_spec.rb
70
81
  - spec/cucumber/messages/version_spec.rb
@@ -96,10 +107,15 @@ requirements: []
96
107
  rubygems_version: 3.1.2
97
108
  signing_key:
98
109
  specification_version: 4
99
- summary: cucumber-messages-16.0.1
110
+ summary: cucumber-messages-17.1.1
100
111
  test_files:
101
- - spec/capture_warnings.rb
102
- - spec/cucumber/messages/id_generator_spec.rb
103
- - spec/cucumber/messages/ndjson_serialization_spec.rb
104
- - spec/cucumber/messages/time_conversion_spec.rb
105
112
  - spec/cucumber/messages/version_spec.rb
113
+ - spec/cucumber/messages/time_conversion_spec.rb
114
+ - spec/cucumber/messages/message/dummy_messages.rb
115
+ - spec/cucumber/messages/message/deserialization_spec.rb
116
+ - spec/cucumber/messages/message/utils_spec.rb
117
+ - spec/cucumber/messages/message/serialization_spec.rb
118
+ - spec/cucumber/messages/ndjson_serialization_spec.rb
119
+ - spec/cucumber/messages/id_generator_spec.rb
120
+ - spec/cucumber/messages/acceptance_spec.rb
121
+ - spec/capture_warnings.rb