coerce String <=> Integer when using Structs
[lwes-ruby.git] / test / unit / test_emit_struct.rb
blob3c86a32d8e6a70768f1a95d3a67124b5cd47247a
1 require "#{File.expand_path(File.dirname(__FILE__))}/../test_helper"
3 class InvalidStruct1 < Struct.new(:invalid)
4   TYPE_DB = []
5 end
7 class TestEmitStruct < Test::Unit::TestCase
9   def setup
10     assert_kind_of Class, self.class.const_get(:Event1)
11     # assert self.class.const_get(:Event1).kind_of?(Struct)
12     @options = LISTENER_DEFAULTS.dup
13   end
15   def test_emit_non_lwes_struct
16     emitter = LWES::Emitter.new(@options)
17     assert_raise(ArgumentError) { emitter << InvalidStruct1.new }
18   end
20   def test_emit_crap
21     emitter = LWES::Emitter.new(@options)
22     assert_raise(TypeError) { emitter << "HHI" }
23     assert_raise(TypeError) { emitter << [] }
24     assert_raise(TypeError) { emitter << {} }
25   end
27   def test_emit_struct_full
28     s = nil
29     out = lwes_listener do
30       assert_nothing_raised do
31         emitter = LWES::Emitter.new(@options)
32         s = Event1.new
33         s.t_bool = true
34         s.t_int16 = -1000
35         s.t_uint16 = 1000
36         s.t_int32 = -64444
37         s.t_uint32 = 64444
38         s.t_int64 = 10_000_000_000
39         s.t_uint64 = 10_000_000_000
40         s.t_ip_addr = '192.168.0.1'
41         s.t_string = "STRING"
42         emitter.emit(s)
43       end
44     end
45     out = out.readlines
46     s.members.each do |m|
47       value = s[m.to_sym] or next
48       regex = /\b#{m} = #{value};/
49       assert_equal 1, out.grep(regex).size,
50                    "#{regex.inspect} didn't match #{out.inspect}"
51     end
52   end
54   def test_emit_struct_coerce_type
55     s = nil
56     out = lwes_listener do
57       assert_nothing_raised do
58         emitter = LWES::Emitter.new(@options)
59         s = Event1.new
60         s.t_bool = true
61         s.t_int16 = '-1000'
62         s.t_uint16 = 1000
63         s.t_int32 = -64444
64         s.t_uint32 = 64444
65         s.t_int64 = 10_000_000_000
66         s.t_uint64 = 10_000_000_000
67         s.t_ip_addr = '192.168.0.1'
68         s.t_string = 1234567
69         emitter.emit(s)
70       end
71     end
72     out = out.readlines
73     s.members.each do |m|
74       value = s[m.to_sym] or next
75       regex = /\b#{m} = #{value};/
76       assert_equal 1, out.grep(regex).size,
77                    "#{regex.inspect} didn't match #{out.inspect}"
78     end
79   end
81   def test_emit_struct_cplusplus
82     s = nil
83     out = lwes_listener do
84       assert_nothing_raised do
85         emitter = LWES::Emitter.new(@options)
86         s = Event1.new
87         s.t_bool = true
88         s.t_int16 = -1000
89         s.t_uint16 = 1000
90         s.t_int32 = -64444
91         s.t_uint32 = 64444
92         s.t_int64 = 10_000_000_000
93         s.t_uint64 = 10_000_000_000
94         s.t_ip_addr = '192.168.0.1'
95         s.t_string = "STRING"
96         emitter << s
97       end
98     end
99     out = out.readlines
100     s.members.each do |m|
101       value = s[m.to_sym] or next
102       regex = /\b#{m} = #{value};/
103       assert_equal 1, out.grep(regex).size,
104                    "#{regex.inspect} didn't match #{out.inspect}"
105     end
106   end
108   def test_emit_from_class
109     opt = {
110       :t_bool => true,
111       :t_int16 => -1000,
112       :t_uint16 => 1000,
113       :t_int32 => -64444,
114       :t_uint32 => 64444,
115       :t_int64 => 10_000_000_000,
116       :t_uint64 => 10_000_000_000,
117       :t_ip_addr => '192.168.0.1',
118       :t_string => "STRING",
119     }
120     out = lwes_listener do
121       assert_nothing_raised do
122         emitter = LWES::Emitter.new(@options)
123         emitter.emit(Event1, opt)
124       end
125     end
126     out = out.readlines
127     opt.each do |m, value|
128       regex = /\b#{m} = #{value};/
129       assert_equal 1, out.grep(regex).size,
130                    "#{regex.inspect} didn't match #{out.inspect}"
131     end
132   end
134   def test_emit_from_class_bad_type
135     out = lwes_listener do
136       e = assert_raises(TypeError) do
137         emitter = LWES::Emitter.new(@options)
138         opt = {
139           :t_int16 => -1000,
140           :t_uint16 => 1000,
141           :t_int32 => -64444,
142           :t_uint32 => 64444,
143           :t_int64 => 10_000_000_000,
144           :t_uint64 => 10_000_000_000,
145           :t_ip_addr => '192.168.0.1',
146           :t_string => true, #"STRING",
147         }
148         emitter.emit(Event1, opt)
149       end
150     end
151     assert out.readlines.empty?
152   end
154   def test_emit_alt_class_name
155     out = lwes_listener do
156       emitter = LWES::Emitter.new(@options)
157       emitter.emit(Event, :t_uint32 => 16384)
158     end
159     out = out.readlines
160     assert_match %r{^Event1\[\d+\]}, out.first
161   end
165 ESF_FILE = "#{File.dirname(__FILE__)}/test1.esf"
166 LWES::Struct.new(:file=>ESF_FILE,
167                  :parent => TestEmitStruct)
168 LWES::Struct.new(:file=>ESF_FILE,
169                  :parent => TestEmitStruct,
170                  :name => "Event1",
171                  :class => "Event")