1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/cases/core_test.rb
Rafael Mendonça França 58ecdd0cf2
Deprecate to_s(format) in favor of to_formatted_s(format)
Ruby 3.1 is going to introduce an [optimization][] that makes interpolation
of some types of objects faster, unless there is a custom implementation
of to_s. Since Rails is overriding `to_s` for a bunch of core classes it
means that this optimization in Rails applications will be disabled.

In order to allow Rails applications to use this optimization in
the future we are deprecating all the reasons we override `to_s` in
those core classes in favor of using `to_formatted_s`.

[optimization]: b08dacfea3
2021-12-06 19:22:05 +00:00

136 lines
4.6 KiB
Ruby

# frozen_string_literal: true
require "cases/helper"
require "models/person"
require "models/topic"
require "pp"
class NonExistentTable < ActiveRecord::Base; end
class CoreTest < ActiveRecord::TestCase
fixtures :topics
def test_inspect_class
assert_equal "ActiveRecord::Base", ActiveRecord::Base.inspect
assert_equal "LoosePerson(abstract)", LoosePerson.inspect
assert_match(/^Topic\(id: integer, title: string/, Topic.inspect)
end
def test_inspect_instance
topic = topics(:first)
assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "#{topic.written_on.to_formatted_s(:inspect)}", bonus_time: "#{topic.bonus_time.to_formatted_s(:inspect)}", last_read: "#{topic.last_read.to_formatted_s(:inspect)}", content: "Have a nice day", important: nil, approved: false, replies_count: 1, unique_replies_count: 0, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "#{topic.created_at.to_formatted_s(:inspect)}", updated_at: "#{topic.updated_at.to_formatted_s(:inspect)}">), topic.inspect
end
def test_inspect_instance_with_lambda_date_formatter
before = Time::DATE_FORMATS[:inspect]
Time::DATE_FORMATS[:inspect] = ->(date) { "my_format" }
topic = topics(:first)
assert_equal %(#<Topic id: 1, title: "The First Topic", author_name: "David", author_email_address: "david@loudthinking.com", written_on: "my_format", bonus_time: "my_format", last_read: "2004-04-15", content: "Have a nice day", important: nil, approved: false, replies_count: 1, unique_replies_count: 0, parent_id: nil, parent_title: nil, type: nil, group: nil, created_at: "my_format", updated_at: "my_format">), topic.inspect
ensure
Time::DATE_FORMATS[:inspect] = before
end
def test_inspect_new_instance
assert_match(/Topic id: nil/, Topic.new.inspect)
end
def test_inspect_limited_select_instance
assert_equal %(#<Topic id: 1>), Topic.all.merge!(select: "id", where: "id = 1").first.inspect
assert_equal %(#<Topic id: 1, title: "The First Topic">), Topic.all.merge!(select: "id, title", where: "id = 1").first.inspect
end
def test_inspect_instance_with_non_primary_key_id_attribute
topic = topics(:first).becomes(TitlePrimaryKeyTopic)
assert_match(/id: 1/, topic.inspect)
end
def test_inspect_class_without_table
assert_equal "NonExistentTable(Table doesn't exist)", NonExistentTable.inspect
end
def test_pretty_print_new
topic = Topic.new
actual = +""
PP.pp(topic, StringIO.new(actual))
expected = <<~PRETTY
#<Topic:0xXXXXXX
id: nil,
title: nil,
author_name: nil,
author_email_address: "test@test.com",
written_on: nil,
bonus_time: nil,
last_read: nil,
content: nil,
important: nil,
approved: true,
replies_count: 0,
unique_replies_count: 0,
parent_id: nil,
parent_title: nil,
type: nil,
group: nil,
created_at: nil,
updated_at: nil>
PRETTY
assert actual.start_with?(expected.split("XXXXXX").first)
assert actual.end_with?(expected.split("XXXXXX").last)
end
def test_pretty_print_persisted
topic = topics(:first)
actual = +""
PP.pp(topic, StringIO.new(actual))
expected = <<~PRETTY
#<Topic:0x\\w+
id: 1,
title: "The First Topic",
author_name: "David",
author_email_address: "david@loudthinking.com",
written_on: 2003-07-16 14:28:11(?:\.2233)? UTC,
bonus_time: 2000-01-01 14:28:00 UTC,
last_read: Thu, 15 Apr 2004,
content: "Have a nice day",
important: nil,
approved: false,
replies_count: 1,
unique_replies_count: 0,
parent_id: nil,
parent_title: nil,
type: nil,
group: nil,
created_at: [^,]+,
updated_at: [^,>]+>
PRETTY
assert_match(/\A#{expected}\z/, actual)
end
def test_pretty_print_uninitialized
topic = Topic.allocate
actual = +""
PP.pp(topic, StringIO.new(actual))
expected = "#<Topic:XXXXXX not initialized>\n"
assert actual.start_with?(expected.split("XXXXXX").first)
assert actual.end_with?(expected.split("XXXXXX").last)
end
def test_pretty_print_overridden_by_inspect
subtopic = Class.new(Topic) do
def inspect
"inspecting topic"
end
end
actual = +""
PP.pp(subtopic.new, StringIO.new(actual))
assert_equal "inspecting topic\n", actual
end
def test_pretty_print_with_non_primary_key_id_attribute
topic = topics(:first).becomes(TitlePrimaryKeyTopic)
actual = +""
PP.pp(topic, StringIO.new(actual))
assert_match(/id: 1/, actual)
end
end