Namespace
Methods
F
S
T
Instance Public methods
foo()
# File activemodel/test/cases/attribute_methods_test.rb, line 103
def foo
  '<3'
end
setup()
# File activerecord/test/cases/attribute_methods_test.rb, line 18
def setup
  @old_matchers = ActiveRecord::Base.send(:attribute_method_matchers).dup
  @target = Class.new(ActiveRecord::Base)
  @target.table_name = 'topics'
end
teardown()
# File activerecord/test/cases/attribute_methods_test.rb, line 24
def teardown
  ActiveRecord::Base.send(:attribute_method_matchers).clear
  ActiveRecord::Base.send(:attribute_method_matchers).concat(@old_matchers)
end
test_accessing_cached_attributes_caches_the_converted_values_and_nothing_else()
# File activerecord/test/cases/attribute_methods_test.rb, line 532
def test_accessing_cached_attributes_caches_the_converted_values_and_nothing_else
  t = topics(:first)
  cache = t.instance_variable_get "@attributes_cache"

  assert_not_nil cache
  assert cache.empty?

  all_columns = Topic.columns.map(&:name)
  uncached_columns = all_columns - cached_columns

  all_columns.each do |attr_name|
    attribute_gets_cached = Topic.cache_attribute?(attr_name)
    val = t.send attr_name unless attr_name == "type"
    if attribute_gets_cached
      assert cached_columns.include?(attr_name)
      assert_equal val, cache[attr_name]
    else
      assert uncached_columns.include?(attr_name)
      assert !cache.include?(attr_name)
    end
  end
end
test_allocated_object_can_be_inspected()

IRB inspects the return value of “MyModel.allocate” by inspecting it.

# File activerecord/test/cases/attribute_methods_test.rb, line 146
def test_allocated_object_can_be_inspected
  topic = Topic.allocate
  topic.instance_eval { @attributes = nil }
  assert_nothing_raised { topic.inspect }
  assert topic.inspect, "#<Topic not initialized>"
end
test_array_content()
# File activerecord/test/cases/attribute_methods_test.rb, line 153
def test_array_content
  topic = Topic.new
  topic.content = %w( one two three )
  topic.save

  assert_equal(%w( one two three ), Topic.find(topic.id).content)
end
test_attribute_keys_on_new_instance()
# File activerecord/test/cases/attribute_methods_test.rb, line 65
def test_attribute_keys_on_new_instance
  t = Topic.new
  assert_equal nil, t.title, "The topics table has a title column, so it should be nil"
  assert_raise(NoMethodError) { t.title2 }
end
test_attribute_present()
# File activerecord/test/cases/attribute_methods_test.rb, line 29
def test_attribute_present
  t = Topic.new
  t.title = "hello there!"
  t.written_on = Time.now
  t.author_name = ""
  assert t.attribute_present?("title")
  assert t.attribute_present?("written_on")
  assert !t.attribute_present?("content")
  assert !t.attribute_present?("author_name")
  
end
test_attribute_present_with_booleans()
# File activerecord/test/cases/attribute_methods_test.rb, line 41
def test_attribute_present_with_booleans
  b1 = Boolean.new
  b1.value = false
  assert b1.attribute_present?(:value)

  b2 = Boolean.new
  b2.value = true
  assert b2.attribute_present?(:value)

  b3 = Boolean.new
  assert !b3.attribute_present?(:value)

  b4 = Boolean.new
  b4.value = false
  b4.save!
  assert Boolean.find(b4.id).attribute_present?(:value)
end
test_boolean_attributes()
# File activerecord/test/cases/attribute_methods_test.rb, line 71
def test_boolean_attributes
  assert ! Topic.find(1).approved?
  assert Topic.find(2).approved?
end
test_bulk_update_respects_access_control()
# File activerecord/test/cases/attribute_methods_test.rb, line 708
def test_bulk_update_respects_access_control
  privatize("title=(value)")

  assert_raise(ActiveRecord::UnknownAttributeError) { @target.new(:title => "Rants about pants") }
  assert_raise(ActiveRecord::UnknownAttributeError) { @target.new.attributes = { :title => "Ants in pants" } }
end
test_cacheable_columns_are_actually_cached()
# File activerecord/test/cases/attribute_methods_test.rb, line 528
def test_cacheable_columns_are_actually_cached
  assert_equal cached_columns.sort, Topic.cached_attributes.sort
end
test_caching_nil_primary_key()
# File activerecord/test/cases/attribute_methods_test.rb, line 59
def test_caching_nil_primary_key
  klass = Class.new(Minimalistic)
  klass.expects(:reset_primary_key).returns(nil).once
  2.times { klass.primary_key }
end
test_case_sensitive_attributes_hash()
# File activerecord/test/cases/attribute_methods_test.rb, line 243
def test_case_sensitive_attributes_hash
  # DB2 is not case-sensitive
  return true if current_adapter?(:DB2Adapter)

  assert_equal @loaded_fixtures['computers']['workstation'].to_hash, Computer.find(:first).attributes
end
test_create_through_factory()
# File activerecord/test/cases/attribute_methods_test.rb, line 261
def test_create_through_factory
  topic = Topic.create("title" => "New Topic")
  topicReloaded = Topic.find(topic.id)
  assert_equal(topic, topicReloaded)
end
test_declared_affixed_attribute_method_affects_respond_to_and_method_missing()
# File activerecord/test/cases/attribute_methods_test.rb, line 462
def test_declared_affixed_attribute_method_affects_respond_to_and_method_missing
  topic = @target.new(:title => 'Budget')
  [['mark_', '_for_update'], ['reset_', '!'], ['default_', '_value?']].each do |prefix, suffix|
    @target.class_eval "def #{prefix}attribute#{suffix}(*args) args end"
    @target.attribute_method_affix({ :prefix => prefix, :suffix => suffix })

    meth = "#{prefix}title#{suffix}"
    assert topic.respond_to?(meth)
    assert_equal ['title'], topic.send(meth)
    assert_equal ['title', 'a'], topic.send(meth, 'a')
    assert_equal ['title', 1, 2, 3], topic.send(meth, 1, 2, 3)
  end
end
test_declared_prefixed_attribute_method_affects_respond_to_and_method_missing()
# File activerecord/test/cases/attribute_methods_test.rb, line 434
def test_declared_prefixed_attribute_method_affects_respond_to_and_method_missing
  topic = @target.new(:title => 'Budget')
  %w(default_ title_).each do |prefix|
    @target.class_eval "def #{prefix}attribute(*args) args end"
    @target.attribute_method_prefix prefix

    meth = "#{prefix}title"
    assert topic.respond_to?(meth)
    assert_equal ['title'], topic.send(meth)
    assert_equal ['title', 'a'], topic.send(meth, 'a')
    assert_equal ['title', 1, 2, 3], topic.send(meth, 1, 2, 3)
  end
end
test_declared_suffixed_attribute_method_affects_respond_to_and_method_missing()
# File activerecord/test/cases/attribute_methods_test.rb, line 448
def test_declared_suffixed_attribute_method_affects_respond_to_and_method_missing
  topic = @target.new(:title => 'Budget')
  %w(_default _title_default _it! _candidate= able?).each do |suffix|
    @target.class_eval "def attribute#{suffix}(*args) args end"
    @target.attribute_method_suffix suffix

    meth = "title#{suffix}"
    assert topic.respond_to?(meth)
    assert_equal ['title'], topic.send(meth)
    assert_equal ['title', 'a'], topic.send(meth, 'a')
    assert_equal ['title', 1, 2, 3], topic.send(meth, 1, 2, 3)
  end
end
test_declaring_attributes_as_cached_adds_them_to_the_attributes_cached_by_default()
# File activerecord/test/cases/attribute_methods_test.rb, line 520
def test_declaring_attributes_as_cached_adds_them_to_the_attributes_cached_by_default
  default_attributes = Topic.cached_attributes
  Topic.cache_attributes :replies_count
  expected = default_attributes + ["replies_count"]
  assert_equal expected.sort, Topic.cached_attributes.sort
  Topic.instance_variable_set "@cached_attributes", nil
end
test_deprecated_underscore_method()
# File activerecord/test/cases/attribute_methods_test.rb, line 120
def test_deprecated_underscore_method
  topic = Topic.find(1)
  assert_equal topic.title, assert_deprecated { topic._title }
end
test_dispatching_column_attributes_through_method_missing_deprecated()
# File activerecord/test/cases/attribute_methods_test.rb, line 751
def test_dispatching_column_attributes_through_method_missing_deprecated
  Topic.define_attribute_methods

  topic = Topic.new(:id => 5)
  topic.id = 5

  topic.method(:id).owner.send(:undef_method, :id)

  assert_deprecated do
    assert_equal 5, topic.id
  end
ensure
  Topic.undefine_attribute_methods
end
test_hash_content()
# File activerecord/test/cases/attribute_methods_test.rb, line 215
def test_hash_content
  topic = Topic.new
  topic.content = { "one" => 1, "two" => 2 }
  topic.save

  assert_equal 2, Topic.find(topic.id).content["two"]

  topic.content_will_change!
  topic.content["three"] = 3
  topic.save

  assert_equal 3, Topic.find(topic.id).content["three"]
end
test_hashes_not_mangled()
# File activerecord/test/cases/attribute_methods_test.rb, line 250
def test_hashes_not_mangled
  new_topic = { :title => "New Topic" }
  new_topic_values = { :title => "AnotherTopic" }

  topic = Topic.new(new_topic)
  assert_equal new_topic[:title], topic.title

  topic.attributes= new_topic_values
  assert_equal new_topic_values[:title], topic.title
end
test_inherited_custom_accessors()

If B < A, and A defines an accessor for 'foo', we don't want to override that by defining a 'foo' method in the generated methods module for B. (That module will be inserted between the two, e.g. [B, <GeneratedAttributes>, A].)

# File activerecord/test/cases/attribute_methods_test.rb, line 773
def test_inherited_custom_accessors
  klass = Class.new(ActiveRecord::Base) do
    self.table_name = "topics"
    self.abstract_class = true
    def title; "omg"; end
    def title=(val); self.author_name = val; end
  end
  subklass = Class.new(klass)
  [klass, subklass].each(&:define_attribute_methods)

  topic = subklass.find(1)
  assert_equal "omg", topic.title

  topic.title = "lol"
  assert_equal "lol", topic.author_name
end
test_inherited_hook_removed()
# File activerecord/test/cases/attribute_methods_test.rb, line 790
def test_inherited_hook_removed
  parent = Class.new(ActiveRecord::Base)
  parent.table_name = "posts"
  def parent.inherited(k)
  end

  klass = Class.new(parent)
  assert_deprecated { klass.define_attribute_methods }
end
test_instance_method_should_be_defined_on_the_base_class()
# File activerecord/test/cases/attribute_methods_test.rb, line 735
def test_instance_method_should_be_defined_on_the_base_class
  subklass = Class.new(Topic)

  Topic.define_attribute_methods

  instance = subklass.new
  instance.id = 5
  assert_equal 5, instance.id
  assert subklass.method_defined?(:id), "subklass is missing id method"

  Topic.undefine_attribute_methods

  assert_equal 5, instance.id
  assert subklass.method_defined?(:id), "subklass is missing id method"
end
test_integers_as_nil()
# File activerecord/test/cases/attribute_methods_test.rb, line 90
def test_integers_as_nil
  test = AutoId.create('value' => '')
  assert_nil AutoId.find(test.id).value
end
test_list_of_serialized_attributes()
# File activerecord/test/cases/attribute_methods_test.rb, line 730
def test_list_of_serialized_attributes
  assert_equal %w(content), Topic.serialized_attributes.keys
  assert_equal %w(preferences), Contact.serialized_attributes.keys
end
test_non_attribute_access_and_assignment()
# File activerecord/test/cases/attribute_methods_test.rb, line 419
def test_non_attribute_access_and_assignment
  topic = Topic.new
  assert !topic.respond_to?("mumbo")
  assert_raise(NoMethodError) { topic.mumbo }
  assert_raise(NoMethodError) { topic.mumbo = 5 }
end
test_overridden_read_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 351
def test_overridden_read_attribute
  topic = Topic.new
  topic.title = "Stop changing the topic"
  def topic.read_attribute(attr_name)
    super(attr_name).upcase
  end

  assert_equal "STOP CHANGING THE TOPIC", topic.send(:read_attribute, "title")
  assert_equal "STOP CHANGING THE TOPIC", topic["title"]

  assert_equal "STOP CHANGING THE TOPIC", topic.send(:read_attribute, :title)
  assert_equal "STOP CHANGING THE TOPIC", topic[:title]
end
test_overridden_write_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 332
def test_overridden_write_attribute
  topic = Topic.new
  def topic.write_attribute(attr_name, value)
    super(attr_name, value.downcase)
  end

  topic.send(:write_attribute, :title, "Yet another topic")
  assert_equal "yet another topic", topic.title

  topic[:title] = "Yet another topic: part 2"
  assert_equal "yet another topic: part 2", topic.title

  topic.send(:write_attribute, "title", "Yet another topic: part 3")
  assert_equal "yet another topic: part 3", topic.title

  topic["title"] = "Yet another topic: part 4"
  assert_equal "yet another topic: part 4", topic.title
end
test_query_attribute_boolean()
# File activerecord/test/cases/attribute_methods_test.rb, line 388
def test_query_attribute_boolean
  [nil, "", false, "false", "f", 0].each do |value|
    assert_equal false, Topic.new(:approved => value).approved?
  end

  [true, "true", "1", 1].each do |value|
    assert_equal true, Topic.new(:approved => value).approved?
  end
end
test_query_attribute_number()
# File activerecord/test/cases/attribute_methods_test.rb, line 379
def test_query_attribute_number
  [nil, 0, "0"].each do |value|
    assert_equal false, Developer.new(:salary => value).salary?
  end

  assert_equal true, Developer.new(:salary => 1).salary?
  assert_equal true, Developer.new(:salary => "1").salary?
end
test_query_attribute_string()
# File activerecord/test/cases/attribute_methods_test.rb, line 371
def test_query_attribute_string
  [nil, "", " "].each do |value|
    assert_equal false, Topic.new(:author_name => value).author_name?
  end

  assert_equal true, Topic.new(:author_name => "Name").author_name?
end
test_query_attribute_with_custom_fields()
# File activerecord/test/cases/attribute_methods_test.rb, line 398
  def test_query_attribute_with_custom_fields
    object = Company.find_by_sql("      SELECT c1.*, c2.ruby_type as string_value, c2.rating as int_value
        FROM companies c1, companies c2
       WHERE c1.firm_id = c2.id
         AND c1.id = 2
").first

    assert_equal "Firm", object.string_value
    assert object.string_value?

    object.string_value = "  "
    assert !object.string_value?

    assert_equal 1, object.int_value.to_i
    assert object.int_value?

    object.int_value = "0"
    assert !object.int_value?
  end
test_question_attributes_respect_access_control()
# File activerecord/test/cases/attribute_methods_test.rb, line 698
def test_question_attributes_respect_access_control
  privatize("title?")

  topic = @target.new(:title => "Isaac Newton's pants")
  assert !topic.respond_to?(:title?)
  exception = assert_raise(NoMethodError) { topic.title? }
  assert exception.message.include?("private method")
  assert topic.send(:title?)
end
test_raises_dangerous_attribute_error_when_defining_activerecord_method_in_model()
# File activerecord/test/cases/attribute_methods_test.rb, line 505
def test_raises_dangerous_attribute_error_when_defining_activerecord_method_in_model
  %w(save create_or_update).each do |method|
    klass = Class.new ActiveRecord::Base
    klass.class_eval "def #{method}() 'defined #{method}' end"
    assert_raise ActiveRecord::DangerousAttributeError do
      klass.instance_method_already_implemented?(method)
    end
  end
end
test_read_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 282
def test_read_attribute
  topic = Topic.new
  topic.title = "Don't change the topic"
  assert_equal "Don't change the topic", topic.send(:read_attribute, "title")
  assert_equal "Don't change the topic", topic["title"]

  assert_equal "Don't change the topic", topic.send(:read_attribute, :title)
  assert_equal "Don't change the topic", topic[:title]
end
test_read_attribute_overwrites_private_method_not_considered_implemented()
# File activerecord/test/cases/attribute_methods_test.rb, line 715
def test_read_attribute_overwrites_private_method_not_considered_implemented
  # simulate a model with a db column that shares its name an inherited
  # private method (e.g. Object#system)
  #
  Object.class_eval do
    private
    def title; "private!"; end
  end
  assert !@target.instance_method_already_implemented?(:title)
  topic = @target.new
  assert_nil topic.title

  Object.send(:undef_method, :title) # remove test method from object
end
test_read_attribute_when_false()
# File activerecord/test/cases/attribute_methods_test.rb, line 292
def test_read_attribute_when_false
  topic = topics(:first)
  topic.approved = false
  assert !topic.approved?, "approved should be false"
  topic.approved = "false"
  assert !topic.approved?, "approved should be false"
end
test_read_attribute_when_true()
# File activerecord/test/cases/attribute_methods_test.rb, line 300
def test_read_attribute_when_true
  topic = topics(:first)
  topic.approved = true
  assert topic.approved?, "approved should be true"
  topic.approved = "true"
  assert topic.approved?, "approved should be true"
end
test_read_attribute_with_nil_should_not_asplode()
# File activerecord/test/cases/attribute_methods_test.rb, line 766
def test_read_attribute_with_nil_should_not_asplode
  assert_equal nil, Topic.new.read_attribute(nil)
end
test_read_attributes_after_type_cast_on_datetime()
# File activerecord/test/cases/attribute_methods_test.rb, line 194
def test_read_attributes_after_type_cast_on_datetime
  tz = "Pacific Time (US & Canada)"

  in_time_zone tz do
    record = @target.new

    date_string = "2011-03-24"
    time        = Time.zone.parse date_string

    record.written_on = date_string
    assert_equal date_string, record.written_on_before_type_cast
    assert_equal time, record.written_on
    assert_equal ActiveSupport::TimeZone[tz], record.written_on.time_zone

    record.save
    record.reload

    assert_equal time, record.written_on
  end
end
test_read_attributes_before_type_cast()
# File activerecord/test/cases/attribute_methods_test.rb, line 161
def test_read_attributes_before_type_cast
  category = Category.new({:name=>"Test categoty", :type => nil})
  category_attrs = {"name"=>"Test categoty", "id" => nil, "type" => nil, "categorizations_count" => nil}
  assert_equal category_attrs , category.attributes_before_type_cast
end
test_read_attributes_before_type_cast_on_boolean()
# File activerecord/test/cases/attribute_methods_test.rb, line 168
def test_read_attributes_before_type_cast_on_boolean
  bool = Boolean.create({ "value" => false })
  if RUBY_PLATFORM =~ /java/
    # JRuby will return the value before typecast as string
    assert_equal "0", bool.reload.attributes_before_type_cast["value"]
  else
    assert_equal 0, bool.reload.attributes_before_type_cast["value"]
  end
end
test_read_attributes_before_type_cast_on_datetime()
# File activerecord/test/cases/attribute_methods_test.rb, line 179
def test_read_attributes_before_type_cast_on_datetime
  in_time_zone "Pacific Time (US & Canada)" do
    record = @target.new

    record.written_on = "345643456"
    assert_equal "345643456", record.written_on_before_type_cast
    assert_equal nil, record.written_on

    record.written_on = "2009-10-11 12:13:14"
    assert_equal "2009-10-11 12:13:14", record.written_on_before_type_cast
    assert_equal Time.zone.parse("2009-10-11 12:13:14"), record.written_on
    assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record.written_on.time_zone
  end
end
test_read_attributes_respect_access_control()
# File activerecord/test/cases/attribute_methods_test.rb, line 678
def test_read_attributes_respect_access_control
  privatize("title")

  topic = @target.new(:title => "The pros and cons of programming naked.")
  assert !topic.respond_to?(:title)
  exception = assert_raise(NoMethodError) { topic.title }
  assert exception.message.include?("private method")
  assert_equal "I'm private", topic.send(:title)
end
test_read_overridden_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 365
def test_read_overridden_attribute
  topic = Topic.new(:title => 'a')
  def topic.title() 'b' end
  assert_equal 'a', topic[:title]
end
test_read_write_boolean_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 308
def test_read_write_boolean_attribute
  topic = Topic.new
  # puts ""
  # puts "New Topic"
  # puts topic.inspect
  topic.approved = "false"
  # puts "Expecting false"
  # puts topic.inspect
  assert !topic.approved?, "approved should be false"
  topic.approved = "false"
  # puts "Expecting false"
  # puts topic.inspect
  assert !topic.approved?, "approved should be false"
  topic.approved = "true"
  # puts "Expecting true"
  # puts topic.inspect
  assert topic.approved?, "approved should be true"
  topic.approved = "true"
  # puts "Expecting true"
  # puts topic.inspect
  assert topic.approved?, "approved should be true"
  # puts ""
end
test_respond_to?()
# File activerecord/test/cases/attribute_methods_test.rb, line 105
def test_respond_to?
  topic = Topic.find(1)
  assert_respond_to topic, "title"
  assert_respond_to topic, "_title"
  assert_respond_to topic, "title?"
  assert_respond_to topic, "title="
  assert_respond_to topic, :title
  assert_respond_to topic, :title?
  assert_respond_to topic, :title=
  assert_respond_to topic, "author_name"
  assert_respond_to topic, "attribute_names"
  assert !topic.respond_to?("nothingness")
  assert !topic.respond_to?(:nothingness)
end
test_respond_to_with_allocated_object()

Syck calls respond_to? before actually calling initialize

# File activerecord/test/cases/attribute_methods_test.rb, line 136
def test_respond_to_with_allocated_object
  topic = Topic.allocate
  assert !topic.respond_to?("nothingness")
  assert !topic.respond_to?(:nothingness)
  assert_respond_to topic, "title"
  assert_respond_to topic, :title
end
test_respond_to_with_custom_primary_key()
# File activerecord/test/cases/attribute_methods_test.rb, line 125
def test_respond_to_with_custom_primary_key
  keyboard = Keyboard.create
  assert_not_nil keyboard.key_number
  assert_equal keyboard.key_number, keyboard.id
  assert keyboard.respond_to?('key_number')
  assert keyboard.respond_to?('_key_number')
  assert keyboard.respond_to?('id')
  assert keyboard.respond_to?('_id')
end
test_set_attributes()
# File activerecord/test/cases/attribute_methods_test.rb, line 76
def test_set_attributes
  topic = Topic.find(1)
  topic.attributes = { "title" => "Budget", "author_name" => "Jason" }
  topic.save
  assert_equal("Budget", topic.title)
  assert_equal("Jason", topic.author_name)
  assert_equal(topics(:first).author_email_address, Topic.find(1).author_email_address)
end
test_set_attributes_with_block()
# File activerecord/test/cases/attribute_methods_test.rb, line 95
def test_set_attributes_with_block
  topic = Topic.new do |t|
    t.title       = "Budget"
    t.author_name = "Jason"
  end

  assert_equal("Budget", topic.title)
  assert_equal("Jason", topic.author_name)
end
test_set_attributes_without_hash()
# File activerecord/test/cases/attribute_methods_test.rb, line 85
def test_set_attributes_without_hash
  topic = Topic.new
  assert_nothing_raised { topic.attributes = '' }
end
test_setting_new_attributes_deprecated()
# File activerecord/test/cases/attribute_methods_test.rb, line 800
def test_setting_new_attributes_deprecated
  t = Topic.new
  assert_deprecated { t[:foo] = "bar" }
  assert_equal "bar", t.foo
  assert_equal "bar", t[:foo]
end
test_setting_time_zone_aware_attribute_in_current_time_zone()
# File activerecord/test/cases/attribute_methods_test.rb, line 659
def test_setting_time_zone_aware_attribute_in_current_time_zone
  utc_time = Time.utc(2008, 1, 1)
  in_time_zone "Pacific Time (US & Canada)" do
    record   = @target.new
    record.written_on = utc_time.in_time_zone
    assert_equal utc_time, record.written_on
    assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record.written_on.time_zone
    assert_equal Time.utc(2007, 12, 31, 16), record.written_on.time
  end
end
test_setting_time_zone_aware_attribute_in_other_time_zone()
# File activerecord/test/cases/attribute_methods_test.rb, line 586
def test_setting_time_zone_aware_attribute_in_other_time_zone
  utc_time = Time.utc(2008, 1, 1)
  cst_time = utc_time.in_time_zone("Central Time (US & Canada)")
  in_time_zone "Pacific Time (US & Canada)" do
    record   = @target.new
    record.written_on = cst_time
    assert_equal utc_time, record.written_on
    assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record.written_on.time_zone
    assert_equal Time.utc(2007, 12, 31, 16), record.written_on.time
  end
end
test_setting_time_zone_aware_attribute_interprets_time_zone_unaware_string_in_time_zone()
# File activerecord/test/cases/attribute_methods_test.rb, line 646
def test_setting_time_zone_aware_attribute_interprets_time_zone_unaware_string_in_time_zone
  time_string = 'Tue Jan 01 00:00:00 2008'
  (-11..13).each do |timezone_offset|
    in_time_zone timezone_offset do
      record   = @target.new
      record.written_on = time_string
      assert_equal Time.zone.parse(time_string), record.written_on
      assert_equal ActiveSupport::TimeZone[timezone_offset], record.written_on.time_zone
      assert_equal Time.utc(2008, 1, 1), record.written_on.time
    end
  end
end
test_setting_time_zone_aware_attribute_to_blank_string_returns_nil()
# File activerecord/test/cases/attribute_methods_test.rb, line 637
def test_setting_time_zone_aware_attribute_to_blank_string_returns_nil
  in_time_zone "Pacific Time (US & Canada)" do
    record   = @target.new
    record.written_on = ' '
    assert_nil record.written_on
    assert_nil record[:written_on]
  end
end
test_setting_time_zone_aware_attribute_to_utc()
# File activerecord/test/cases/attribute_methods_test.rb, line 575
def test_setting_time_zone_aware_attribute_to_utc
  in_time_zone "Pacific Time (US & Canada)" do
    utc_time = Time.utc(2008, 1, 1)
    record   = @target.new
    record.written_on = utc_time
    assert_equal utc_time, record.written_on
    assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record.written_on.time_zone
    assert_equal Time.utc(2007, 12, 31, 16), record.written_on.time
  end
end
test_setting_time_zone_aware_attribute_with_string()
# File activerecord/test/cases/attribute_methods_test.rb, line 609
def test_setting_time_zone_aware_attribute_with_string
  utc_time = Time.utc(2008, 1, 1)
  (-11..13).each do |timezone_offset|
    time_string = utc_time.in_time_zone(timezone_offset).to_s
    in_time_zone "Pacific Time (US & Canada)" do
      record   = @target.new
      record.written_on = time_string
      assert_equal Time.zone.parse(time_string), record.written_on
      assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record.written_on.time_zone
      assert_equal Time.utc(2007, 12, 31, 16), record.written_on.time
    end
  end
end
test_setting_time_zone_aware_read_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 598
def test_setting_time_zone_aware_read_attribute
  utc_time = Time.utc(2008, 1, 1)
  cst_time = utc_time.in_time_zone("Central Time (US & Canada)")
  in_time_zone "Pacific Time (US & Canada)" do
    record = @target.create(:written_on => cst_time).reload
    assert_equal utc_time, record[:written_on]
    assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record[:written_on].time_zone
    assert_equal Time.utc(2007, 12, 31, 16), record[:written_on].time
  end
end
test_setting_time_zone_conversion_for_attributes_should_write_value_on_class_variable()
# File activerecord/test/cases/attribute_methods_test.rb, line 670
def test_setting_time_zone_conversion_for_attributes_should_write_value_on_class_variable
  Topic.skip_time_zone_conversion_for_attributes = [:field_a]
  Minimalistic.skip_time_zone_conversion_for_attributes = [:field_b]

  assert_equal [:field_a], Topic.skip_time_zone_conversion_for_attributes
  assert_equal [:field_b], Minimalistic.skip_time_zone_conversion_for_attributes
end
test_should_unserialize_attributes_for_frozen_records()
# File activerecord/test/cases/attribute_methods_test.rb, line 476
def test_should_unserialize_attributes_for_frozen_records
  myobj = {:value1 => :value2}
  topic = Topic.create("content" => myobj)
  topic.freeze
  assert_equal myobj, topic.content
end
test_time_attributes_are_retrieved_in_current_time_zone()
# File activerecord/test/cases/attribute_methods_test.rb, line 563
def test_time_attributes_are_retrieved_in_current_time_zone
  in_time_zone "Pacific Time (US & Canada)" do
    utc_time = Time.utc(2008, 1, 1)
    record   = @target.new
    record[:written_on] = utc_time
    assert_equal utc_time, record.written_on # record.written on is equal to (i.e., simultaneous with) utc_time
    assert_kind_of ActiveSupport::TimeWithZone, record.written_on # but is a TimeWithZone
    assert_equal ActiveSupport::TimeZone["Pacific Time (US & Canada)"], record.written_on.time_zone # and is in the current Time.zone
    assert_equal Time.utc(2007, 12, 31, 16), record.written_on.time # and represents time values adjusted accordingly
  end
end
test_time_zone_aware_attribute_saved()
# File activerecord/test/cases/attribute_methods_test.rb, line 623
def test_time_zone_aware_attribute_saved
  old_default, ActiveRecord::Base.default_timezone = ActiveRecord::Base.default_timezone, :utc

  in_time_zone 1 do
    record = @target.create(:written_on => '2012-02-20 10:00')

    record.written_on = '2012-02-20 09:00'
    record.save
    assert_equal Time.zone.local(2012, 02, 20, 9), record.reload.written_on
  end
ensure
  ActiveRecord::Base.default_timezone = old_default
end
test_typecast_attribute_from_select_to_false()
# File activerecord/test/cases/attribute_methods_test.rb, line 483
def test_typecast_attribute_from_select_to_false
  topic = Topic.create(:title => 'Budget')
  # Oracle does not support boolean expressions in SELECT
  if current_adapter?(:OracleAdapter)
    topic = Topic.find(:first, :select => "topics.*, 0 as is_test")
  else
    topic = Topic.find(:first, :select => "topics.*, 1=2 as is_test")
  end
  assert !topic.is_test?
end
test_typecast_attribute_from_select_to_true()
# File activerecord/test/cases/attribute_methods_test.rb, line 494
def test_typecast_attribute_from_select_to_true
  topic = Topic.create(:title => 'Budget')
  # Oracle does not support boolean expressions in SELECT
  if current_adapter?(:OracleAdapter)
    topic = Topic.find(:first, :select => "topics.*, 1 as is_test")
  else
    topic = Topic.find(:first, :select => "topics.*, 2=2 as is_test")
  end
  assert topic.is_test?
end
test_undeclared_attribute_method_does_not_affect_respond_to_and_method_missing()
# File activerecord/test/cases/attribute_methods_test.rb, line 426
def test_undeclared_attribute_method_does_not_affect_respond_to_and_method_missing
  topic = @target.new(:title => 'Budget')
  assert topic.respond_to?('title')
  assert_equal 'Budget', topic.title
  assert !topic.respond_to?('title_hello_world')
  assert_raise(NoMethodError) { topic.title_hello_world }
end
test_update_array_content()
# File activerecord/test/cases/attribute_methods_test.rb, line 229
def test_update_array_content
  topic = Topic.new
  topic.content = %w( one two three )

  topic.content.push "four"
  assert_equal(%w( one two three four ), topic.content)

  topic.save

  topic = Topic.find(topic.id)
  topic.content << "five"
  assert_equal(%w( one two three four five ), topic.content)
end
test_write_attribute()
# File activerecord/test/cases/attribute_methods_test.rb, line 267
def test_write_attribute
  topic = Topic.new
  topic.send(:write_attribute, :title, "Still another topic")
  assert_equal "Still another topic", topic.title

  topic[:title] = "Still another topic: part 2"
  assert_equal "Still another topic: part 2", topic.title

  topic.send(:write_attribute, "title", "Still another topic: part 3")
  assert_equal "Still another topic: part 3", topic.title

  topic["title"] = "Still another topic: part 4"
  assert_equal "Still another topic: part 4", topic.title
end
test_write_attributes_respect_access_control()
# File activerecord/test/cases/attribute_methods_test.rb, line 688
def test_write_attributes_respect_access_control
  privatize("title=(value)")

  topic = @target.new
  assert !topic.respond_to?(:title=)
  exception = assert_raise(NoMethodError) { topic.title = "Pants"}
  assert exception.message.include?("private method")
  topic.send(:title=, "Very large pants")
end
test_write_nil_to_time_attributes()
# File activerecord/test/cases/attribute_methods_test.rb, line 555
def test_write_nil_to_time_attributes
  in_time_zone "Pacific Time (US & Canada)" do
    record = @target.new
    record.written_on = nil
    assert_nil record.written_on
  end
end
title()
# File activerecord/test/cases/attribute_methods_test.rb, line 721
def title; "private!"; end
title=(val)
# File activerecord/test/cases/attribute_methods_test.rb, line 778
def title=(val); self.author_name = val; end