fixes warnings for Ruby 1.9.3dev
[lwes-ruby.git] / test / unit / test_struct.rb
blob3a126d04f5e3162883adc633a7981703ea5c76bc
1 require "#{File.expand_path(File.dirname(__FILE__))}/../test_helper"
3 module Dummy
4 end
5 class TestStruct < Test::Unit::TestCase
7    EXPECT_DB = {
8     :SenderPort => LWES::U_INT_16,
9     :st => LWES::STRING,
10     :enc => LWES::INT_16,
11     :SiteID => LWES::U_INT_16,
12     :ReceiptTime => LWES::INT_64,
13     :SenderIP => LWES::IP_ADDR,
15     :t_ip_addr => LWES::IP_ADDR,
16     :t_bool => LWES::BOOLEAN,
17     :t_uint64 => LWES::U_INT_64,
18     :t_uint32 => LWES::U_INT_32,
19     :t_int64 => LWES::INT_64,
20     :t_string => LWES::STRING,
21     :t_int32 => LWES::INT_32,
22     :t_uint16 => LWES::U_INT_16,
23     :t_int16 => LWES::INT_16
24   }
25   EXPECT_LIST = [
26     # class-specific fields first
27     [ :t_bool, "t_bool", LWES::BOOLEAN],
28     [ :t_int16, "t_int16", LWES::INT_16 ],
29     [ :t_int32, "t_int32", LWES::INT_32],
30     [ :t_int64, "t_int64", LWES::INT_64],
31     [ :t_ip_addr, "t_ip_addr", LWES::IP_ADDR],
32     [ :t_string, "t_string", LWES::STRING],
33     [ :t_uint16, "t_uint16", LWES::U_INT_16],
34     [ :t_uint32, "t_uint32", LWES::U_INT_32],
35     [ :t_uint64, "t_uint64", LWES::U_INT_64],
37     # MetaEventInfo
38     [ :ReceiptTime, "ReceiptTime", LWES::INT_64],
39     [ :SenderIP, "SenderIP", LWES::IP_ADDR],
40     [ :SenderPort, "SenderPort", LWES::U_INT_16],
41     [ :SiteID, "SiteID", LWES::U_INT_16],
42     [ :enc, "enc", LWES::INT_16],
43     [ :st, "st", LWES::STRING],
44   ]
46   ESF_FILE = "#{File.dirname(__FILE__)}/test1.esf"
47   MULTI_EVENT_ESF = "#{File.dirname(__FILE__)}/test2.esf"
49   def test_constants
50     assert_instance_of Module, LWES, "LWES is not a module"
51   end
53   def test_multiple_events_in_esf
54     a = LWES::Struct.new(:file=>MULTI_EVENT_ESF, :class => :EventBool)
55     assert_equal "EventBool", a.name
56     b = LWES::Struct.new(:file=>MULTI_EVENT_ESF,
57                          :class => :EVENT_BOOL,
58                          :name => :EventBool)
59     assert_equal "EVENT_BOOL", b.name
60     assert_equal false, b.const_get(:HAVE_ENCODING)
62     assert_raises(RuntimeError) { LWES::Struct.new(:file=>MULTI_EVENT_ESF) }
63   end
65   def test_new_with_type_db
66     type_db = LWES::TypeDB.new(ESF_FILE)
67     assert type_db.instance_of?(LWES::TypeDB)
68     a = LWES::Struct.new(:db=>type_db, :class=>:TypeDB_Event, :name=>:Event1)
69     assert a.instance_of?(Class)
70     assert_equal "TypeDB_Event", a.name
71     assert a.const_get(:TYPE_DB).instance_of?(LWES::TypeDB)
72     assert a.const_get(:EVENT_DEF).instance_of?(Hash)
73     assert_equal EXPECT_DB, a.const_get(:EVENT_DEF)
74     assert_equal EXPECT_LIST, a.const_get(:TYPE_LIST)
75     y = a.new
76     assert_equal "TypeDB_Event", y.class.name
77     assert_kind_of(::Struct, y)
78   end
80   def test_new_with_defaults_hash
81     a = LWES::Struct.new(:file=>ESF_FILE)
82     assert a.instance_of?(Class)
83     assert_equal "Event1", a.name
84     assert a.const_get(:TYPE_DB).instance_of?(LWES::TypeDB)
85     assert a.const_get(:EVENT_DEF).instance_of?(Hash)
86     assert a.const_get(:HAVE_ENCODING)
87     assert_equal EXPECT_DB, a.const_get(:EVENT_DEF)
88     assert_equal EXPECT_LIST, a.const_get(:TYPE_LIST)
89     y = a.new
90     assert_equal "Event1", y.class.name
91     assert_kind_of(::Struct, y)
92   end
94   def test_new_with_alt_name
95     a = LWES::Struct.new(:file=>ESF_FILE,:class=>:Event,:name=>:Event1)
96     assert a.instance_of?(Class)
97     assert_equal "Event", a.name
98     assert a.const_get(:EVENT_DEF).instance_of?(Hash)
99     assert_equal EXPECT_DB, a.const_get(:EVENT_DEF)
100     y = a.new
101     assert_equal "Event", y.class.name
102     assert_kind_of(::Struct, y)
103   end
105   def test_new_in_module
106     a = LWES::Struct.new(:file=>ESF_FILE,:class=>:Event1,:parent=>LWES)
107     assert a.instance_of?(Class)
108     assert_equal "LWES::Event1", a.name
109     assert a.const_get(:EVENT_DEF).instance_of?(Hash)
110     assert_equal EXPECT_DB, a.const_get(:EVENT_DEF)
111     y = a.new
112     assert_equal "LWES::Event1", y.class.name
113     assert_kind_of(::Struct, y)
114   end
116   def test_eval
117     a = LWES::Struct.new(:file=>ESF_FILE,:class=>:Eval,:name=>:Event1) do
118       def aaaaaaaa
119         true
120       end
122       class << self
123         def get_event_def
124           const_get(:EVENT_DEF)
125         end
126       end
127     end
128     y = a.new
129     assert y.respond_to?(:aaaaaaaa)
130     assert_instance_of TrueClass, y.aaaaaaaa
131     assert_equal a.const_get(:EVENT_DEF).object_id, a.get_event_def.object_id
132     assert_equal EXPECT_DB, a.get_event_def
133   end
135   def test_new_initialize
136     a = LWES::Struct.new(:file=>ESF_FILE,
137                          :class=>:Init,
138                          :name=>:Event1,
139                          :parent=>Dummy)
140     assert_kind_of Class, a
141     y = Dummy::Init.new(:t_ip_addr => "192.168.0.1", :t_bool => true)
142     assert_equal "192.168.0.1", y.t_ip_addr
143     assert_equal true, y.t_bool
144   end
146   def test_new_initialize_defaults
147     a = LWES::Struct.new(:file=>ESF_FILE,
148                          :class=> :LWES_Blah,
149                          :name=>:Event1,
150                          :defaults => { :enc => 1 })
151     assert_kind_of Class, a
152     y = LWES_Blah.new
153     assert_equal 1, y.enc
154   end
156   def test_new_initialize_defaults_and_hash
157     a = LWES::Struct.new(:file=>ESF_FILE,
158                          :class=> :LWES_Foo,
159                          :name=>:Event1,
160                          :defaults => { :enc => 1 })
161     assert_kind_of Class, a
162     y = LWES_Foo.new(:enc => 2)
163     assert_equal 2, y.enc
164   end
166   def test_new_initialize_struct_style
167     a = LWES::Struct.new(:file=>ESF_FILE,
168                          :class=> :LWES_New,
169                          :name=>:Event1)
170     assert_kind_of Class, a
171     y = LWES_Foo.new(true, -16, -32, -64, "127.0.0.1", "HI", 16, 32, 64)
172     assert_equal(true, y.t_bool)
173     assert_equal(-16, y.t_int16)
174     assert_equal(-32, y.t_int32)
175     assert_equal(-64, y.t_int64)
176     assert_equal("127.0.0.1", y.t_ip_addr)
177     assert_equal("HI", y.t_string)
178     assert_equal(16, y.t_uint16)
179     assert_equal(32, y.t_uint32)
180     assert_equal(64, y.t_uint64)
181   end
183   def test_skip_attr
184     a = LWES::Struct.new(:file=>ESF_FILE,
185                          :class=> :LWES_Skip,
186                          :name=>:Event1,
187                          :skip => %w(SenderIP SenderPort SiteID ReceiptTime))
188     assert_kind_of Class, a
189     y = LWES_Skip.new
190     assert ! y.respond_to?(:SenderIP)
191     assert ! y.respond_to?(:SenderPort)
192     assert ! y.respond_to?(:SiteID)
193     assert ! y.respond_to?(:ReceiptTime)
194     assert y.respond_to?(:enc)
195     assert y.respond_to?(:st)
196   end
198   def test_skip_regexp
199     a = LWES::Struct.new(:file=>ESF_FILE,
200                          :class=> :LWES_SkipRe,
201                          :name=>:Event1,
202                          :skip => %r(\AS))
203     assert_kind_of Class, a
204     y = LWES_SkipRe.new
205     assert ! y.respond_to?(:SenderIP)
206     assert ! y.respond_to?(:SenderPort)
207     assert ! y.respond_to?(:SiteID)
208     assert y.respond_to?(:ReceiptTime)
209     assert y.respond_to?(:enc)
210     assert y.respond_to?(:st)
211   end