@@ -132,25 +132,25 @@ def test_initialize
132132 assert_equal expected , known_classes
133133 end
134134
135- def test_do_attr_rb_attr
135+ def assert_do_attr ( flags )
136136 content = <<-EOF
137137void Init_Blah(void) {
138138 cBlah = rb_define_class("Blah", rb_cObject);
139139
140140 /*
141141 * This is an accessor
142142 */
143- rb_attr( cBlah, rb_intern( "accessor"), 1, 1, Qfalse) ;
143+ #{ yield " cBlah" , "accessor" , flags [ 1 ] , flags [ 1 ] } ;
144144
145145 /*
146146 * This is a reader
147147 */
148- rb_attr( cBlah, rb_intern( "reader"), 1, 0, Qfalse) ;
148+ #{ yield " cBlah" , "reader" , flags [ 1 ] , flags [ 0 ] } ;
149149
150150 /*
151151 * This is a writer
152152 */
153- rb_attr( cBlah, rb_intern( "writer"), 0, 1, Qfalse) ;
153+ #{ yield " cBlah" , "writer" , flags [ 0 ] , flags [ 1 ] } ;
154154}
155155 EOF
156156
@@ -176,72 +176,21 @@ def test_do_attr_rb_attr
176176 assert_equal 'This is a writer' , writer . comment . text
177177 end
178178
179- def test_do_attr_rb_attr_2
180- content = <<-EOF
181- void Init_Blah(void) {
182- cBlah = rb_define_class("Blah", rb_cObject);
183-
184- /*
185- * This is an accessor
186- */
187- rb_attr(cBlah, rb_intern_const("accessor"), 1, 1, Qfalse);
188-
189- /*
190- * This is a reader
191- */
192- rb_attr(cBlah, rb_intern_const("reader"), 1, 0, Qfalse);
193-
194- /*
195- * This is a writer
196- */
197- rb_attr(cBlah, rb_intern_const("writer"), 0, 1, Qfalse);
198- }
199- EOF
200-
201- klass = util_get_class content , 'cBlah'
202-
203- attrs = klass . attributes
204- assert_equal 3 , attrs . length , attrs . inspect
205-
206- accessor = attrs . shift
207- assert_equal 'accessor' , accessor . name
208- assert_equal 'RW' , accessor . rw
209- assert_equal 'This is an accessor' , accessor . comment . text
210- assert_equal @top_level , accessor . file
211-
212- reader = attrs . shift
213- assert_equal 'reader' , reader . name
214- assert_equal 'R' , reader . rw
215- assert_equal 'This is a reader' , reader . comment . text
216-
217- writer = attrs . shift
218- assert_equal 'writer' , writer . name
219- assert_equal 'W' , writer . rw
220- assert_equal 'This is a writer' , writer . comment . text
221- end
222-
223- def test_do_attr_rb_define_attr
224- content = <<-EOF
225- void Init_Blah(void) {
226- cBlah = rb_define_class("Blah", rb_cObject);
227-
228- /*
229- * This is an accessor
230- */
231- rb_define_attr(cBlah, "accessor", 1, 1);
232- }
233- EOF
234-
235- klass = util_get_class content , 'cBlah'
236-
237- attrs = klass . attributes
238- assert_equal 1 , attrs . length , attrs . inspect
239-
240- accessor = attrs . shift
241- assert_equal 'accessor' , accessor . name
242- assert_equal 'RW' , accessor . rw
243- assert_equal 'This is an accessor' , accessor . comment . text
244- assert_equal @top_level , accessor . file
179+ {
180+ num : %w[ 0 1 ] ,
181+ macro : %w[ FALSE TRUE ] ,
182+ ruby : %w[ Qfalse Qtrue ] ,
183+ bool : %w[ false true ] ,
184+ } . each_pair do |name , values |
185+ define_method ( "test_do_attr:rb_attr:intern:#{ name } " ) do
186+ assert_do_attr ( values ) { |c , name , r , w | %[rb_attr(#{ c } , rb_intern("#{ name } "), #{ r } , #{ w } , Qfalse)] }
187+ end
188+ define_method ( "test_do_attr:rb_attr:intern_const:#{ name } " ) do
189+ assert_do_attr ( values ) { |c , name , r , w | %[rb_attr(#{ c } , rb_intern_const("#{ name } "), #{ r } , #{ w } , Qfalse)] }
190+ end
191+ define_method ( "test_do_attr:rb_define_attr:#{ name } " ) do
192+ assert_do_attr ( values ) { |c , name , r , w | %[rb_define_attr(#{ c } , "#{ name } ", #{ r } , #{ w } )] }
193+ end
245194 end
246195
247196 def test_do_aliases
0 commit comments