From cb44e99de46e924bdceab9294fbaea9732e9dba6 Mon Sep 17 00:00:00 2001
From: Santiago Pastorino <santiago@wyeworks.com>
Date: Wed, 16 Mar 2011 19:17:47 -0300
Subject: Add test for define_attribute_method using as name an invalid
 identifier

---
 activemodel/test/cases/attribute_methods_test.rb | 29 +++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

(limited to 'activemodel')

diff --git a/activemodel/test/cases/attribute_methods_test.rb b/activemodel/test/cases/attribute_methods_test.rb
index b001adb35a..4cfec66015 100644
--- a/activemodel/test/cases/attribute_methods_test.rb
+++ b/activemodel/test/cases/attribute_methods_test.rb
@@ -36,6 +36,21 @@ private
   end
 end
 
+class ModelWithWeirdNamesAttributes
+  include ActiveModel::AttributeMethods
+
+  attribute_method_suffix ''
+
+  def attributes
+    { :'a?b' => 'value of a?b' }
+  end
+
+private
+  def attribute(name)
+    attributes[name.to_sym]
+  end
+end
+
 class AttributeMethodsTest < ActiveModel::TestCase
   test 'unrelated classes should not share attribute method matchers' do
     assert_not_equal ModelWithAttributes.send(:attribute_method_matchers),
@@ -49,6 +64,14 @@ class AttributeMethodsTest < ActiveModel::TestCase
     assert_equal "value of foo", ModelWithAttributes.new.foo
   end
 
+  test '#define_attribute_method generates attribute method with invalid identifier characters' do
+    ModelWithWeirdNamesAttributes.define_attribute_method(:'a?b')
+    ModelWithWeirdNamesAttributes.define_attribute_method(:'a?b')
+
+    assert_respond_to ModelWithWeirdNamesAttributes.new, :'a?b'
+    assert_equal "value of a?b", ModelWithWeirdNamesAttributes.new.send('a?b')
+  end
+
   test '#define_attribute_methods generates attribute methods' do
     ModelWithAttributes.define_attribute_methods([:foo])
 
@@ -58,15 +81,15 @@ class AttributeMethodsTest < ActiveModel::TestCase
 
   test '#define_attribute_methods generates attribute methods with spaces in their names' do
     ModelWithAttributesWithSpaces.define_attribute_methods([:'foo bar'])
-  
+
     assert_respond_to ModelWithAttributesWithSpaces.new, :'foo bar'
     assert_equal "value of foo bar", ModelWithAttributesWithSpaces.new.send(:'foo bar')
   end
-  
+
   test '#alias_attribute works with attributes with spaces in their names' do
     ModelWithAttributesWithSpaces.define_attribute_methods([:'foo bar'])
     ModelWithAttributesWithSpaces.alias_attribute(:'foo_bar', :'foo bar')
-  
+
     assert_equal "value of foo bar", ModelWithAttributesWithSpaces.new.foo_bar
   end
 
-- 
cgit v1.2.3