rdoc for Emitter#<<
[lwes-ruby.git] / test / unit / test_emit_struct.rb
blob235f7ba02aa1b9f83dcdf59af7cc0e0c8b86dedf
1 require "#{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(ArgumentError) { emitter << "HHI" }
23     assert_raise(ArgumentError) { emitter << [] }
24     assert_raise(ArgumentError) { 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_cplusplus
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 = "STRING"
69         emitter << 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_from_class
82     opt = {
83       :t_bool => true,
84       :t_int16 => -1000,
85       :t_uint16 => 1000,
86       :t_int32 => -64444,
87       :t_uint32 => 64444,
88       :t_int64 => 10_000_000_000,
89       :t_uint64 => 10_000_000_000,
90       :t_ip_addr => '192.168.0.1',
91       :t_string => "STRING",
92     }
93     out = lwes_listener do
94       assert_nothing_raised do
95         emitter = LWES::Emitter.new(@options)
96         emitter.emit(Event1, opt)
97       end
98     end
99     out = out.readlines
100     opt.each do |m, value|
101       regex = /\b#{m} = #{value};/
102       assert_equal 1, out.grep(regex).size,
103                    "#{regex.inspect} didn't match #{out.inspect}"
104     end
105   end
107   def test_emit_from_class_bad_type
108     out = lwes_listener do
109       e = assert_raises(TypeError) do
110         emitter = LWES::Emitter.new(@options)
111         opt = {
112           :t_int16 => -1000,
113           :t_uint16 => 1000,
114           :t_int32 => -64444,
115           :t_uint32 => 64444,
116           :t_int64 => 10_000_000_000,
117           :t_uint64 => 10_000_000_000,
118           :t_ip_addr => '192.168.0.1',
119           :t_string => true, #"STRING",
120         }
121         emitter.emit(Event1, opt)
122       end
123     end
124     assert out.readlines.empty?
125   end
127   def test_emit_alt_class_name
128     out = lwes_listener do
129       emitter = LWES::Emitter.new(@options)
130       emitter.emit(Event, :t_uint32 => 16384)
131     end
132     out = out.readlines
133     assert_match %r{^Event1\[\d+\]}, out.first
134   end
138 ESF_FILE = "#{File.dirname(__FILE__)}/test1.esf"
139 LWES::Struct.new(:file=>ESF_FILE,
140                  :parent => TestEmitStruct)
141 LWES::Struct.new(:file=>ESF_FILE,
142                  :parent => TestEmitStruct,
143                  :name => "Event1",
144                  :class => "Event")