require 'date' require File.dirname(__FILE__) + '/../abstract_unit' class StringInflectionsTest < Test::Unit::TestCase def test_pluralize InflectorTest::SingularToPlural.each do |singular, plural| assert_equal(plural, singular.pluralize) end assert_equal("plurals", "plurals".pluralize) end def test_singularize InflectorTest::SingularToPlural.each do |singular, plural| assert_equal(singular, plural.singularize) end end def test_titleize InflectorTest::MixtureToTitleCase.each do |before, titleized| assert_equal(titleized, before.titleize) end end def test_camelize InflectorTest::CamelToUnderscore.each do |camel, underscore| assert_equal(camel, underscore.camelize) end end def test_underscore InflectorTest::CamelToUnderscore.each do |camel, underscore| assert_equal(underscore, camel.underscore) end assert_equal "html_tidy", "HTMLTidy".underscore assert_equal "html_tidy_generator", "HTMLTidyGenerator".underscore end def test_underscore_to_lower_camel InflectorTest::UnderscoreToLowerCamel.each do |underscored, lower_camel| assert_equal(lower_camel, underscored.camelize(:lower)) end end def test_demodulize assert_equal "Account", "MyApplication::Billing::Account".demodulize end def test_foreign_key InflectorTest::ClassNameToForeignKeyWithUnderscore.each do |klass, foreign_key| assert_equal(foreign_key, klass.foreign_key) end InflectorTest::ClassNameToForeignKeyWithoutUnderscore.each do |klass, foreign_key| assert_equal(foreign_key, klass.foreign_key(false)) end end def test_tableize InflectorTest::ClassNameToTableName.each do |class_name, table_name| assert_equal(table_name, class_name.tableize) end end def test_classify InflectorTest::ClassNameToTableName.each do |class_name, table_name| assert_equal(class_name, table_name.classify) end end def test_humanize InflectorTest::UnderscoreToHuman.each do |underscore, human| assert_equal(human, underscore.humanize) end end def test_string_to_time assert_equal Time.utc(2005, 2, 27, 23, 50), "2005-02-27 23:50".to_time assert_equal Time.local(2005, 2, 27, 23, 50), "2005-02-27 23:50".to_time(:local) assert_equal DateTime.civil(2039, 2, 27, 23, 50), "2039-02-27 23:50".to_time assert_equal Time.local_time(2039, 2, 27, 23, 50), "2039-02-27 23:50".to_time(:local) assert_equal Date.new(2005, 2, 27), "2005-02-27".to_date assert_equal DateTime.civil(2039, 2, 27, 23, 50), "2039-02-27 23:50".to_datetime end def test_access s = "hello" assert_equal "h", s.at(0) assert_equal "llo", s.from(2) assert_equal "hel", s.to(2) assert_equal "h", s.first assert_equal "he", s.first(2) assert_equal "o", s.last assert_equal "llo", s.last(3) assert_equal "hello", s.last(10) assert_equal 'x', 'x'.first assert_equal 'x', 'x'.first(4) assert_equal 'x', 'x'.last assert_equal 'x', 'x'.last(4) end def test_access_returns_a_real_string hash = {} hash["h"] = true hash["hello123".at(0)] = true assert_equal %w(h), hash.keys hash = {} hash["llo"] = true hash["hello".from(2)] = true assert_equal %w(llo), hash.keys hash = {} hash["hel"] = true hash["hello".to(2)] = true assert_equal %w(hel), hash.keys hash = {} hash["hello"] = true hash["123hello".last(5)] = true assert_equal %w(hello), hash.keys hash = {} hash["hello"] = true hash["hello123".first(5)] = true assert_equal %w(hello), hash.keys end def test_starts_ends_with s = "hello" assert s.starts_with?('h') assert s.starts_with?('hel') assert !s.starts_with?('el') assert s.ends_with?('o') assert s.ends_with?('lo') assert !s.ends_with?('el') end def test_each_char_with_utf8_string_when_kcode_is_utf8 old_kcode, $KCODE = $KCODE, 'UTF8' '€2.99'.each_char do |char| assert_not_equal 1, char.length break end ensure $KCODE = old_kcode end end