# encoding: UTF-8
require "test/unit"
$: << File.join(File.expand_path(File.dirname(__FILE__)), '../lib')
require File.join(File.expand_path(File.dirname(__FILE__)), "../init.rb")
class StringExtensionsTest < Test::Unit::TestCase
def test_to_html
require "rubygems"
require "RedCloth"
{
"h1. A Solution" => "
A Solution
",
"I hated wrapping textilize around a string.\n\nIt always felt dirty." =>
"I hated wrapping textilize around a string.
\nIt always felt dirty.
",
"I think _this_ is awesome" => "I think this is awesome
",
"Um... _*really*_, man" => "Um… really, man
"
}.each do |plain, html|
assert_equal html, plain.to_html
end
rescue LoadError
puts "\n>> Could not load RedCloth. String#to_html was not tested.\n>> Please gem install RedCloth if you'd like to use this functionality."
end
def test_to_html_lite
require "rubygems"
require "RedCloth"
{
"I have no pee on me" => "I have no pee on me",
"But I _do_ get Textile!" => "But I do get Textile!"
}.each do |plain, html|
assert_equal html, plain.to_html(:lite)
end
rescue LoadError
puts "\n>> Could not load RedCloth. String#to_html (with :lite argument) was not tested.\n>> Please gem install RedCloth if you'd like to use this functionality."
end
def test_to_url
{
"This has 100% too much formatting
" =>
"this-has-100-percent-too-much-formatting",
"Tea & crumpets & crêpes for me!" =>
"tea-and-crumpets-and-crepes-for-me",
"The Suspense... Is... Killing Me" =>
"the-suspense-dot-dot-dot-is-dot-dot-dot-killing-me",
"How to use attr_accessible and attr_protected" =>
"how-to-use-attr-accessible-and-attr-protected",
"I'm just making sure there's nothing wrong with things!" =>
"im-just-making-sure-theres-nothing-wrong-with-things",
"foo = bar and bar=foo" =>
"foo-equals-bar-and-bar-equals-foo",
"Period.period" =>
"period-dot-period",
"Will…This Work?" =>
"will-dot-dot-dot-this-work",
"¼ pound with cheese" =>
"one-fourth-pound-with-cheese",
"Will's Ferrel" =>
"wills-ferrel",
"Капитал" =>
"kapital",
"Ελλάδα" =>
"ellada",
"中文" =>
"zhong-wen",
"Paul Cézanne" =>
"paul-cezanne",
"21'17ʼ51" =>
"21-17-51",
"ITCZ 1 (21°17ʼ51.78”N / 89°35ʼ28.18”O / 26-04-08 / 09:00 am)" =>
"itcz-1-21-degrees-17-51-dot-78-n-slash-89-degrees-35-28-dot-18-o-slash-26-04-08-slash-09-00-am"
}.each do |html, plain|
assert_equal plain, html.to_url
end
end
def test_remove_formatting
{
"This has 100% too much formatting
" =>
"This has 100 percent too much formatting",
"Tea & crumpets & crêpes for me!" =>
"Tea and crumpets and crepes for me"
}.each do |html, plain|
assert_equal plain, html.remove_formatting
end
end
def test_strip_html_tags
{
"This is good but that is better
" =>
"This is good but that is better",
"This is invalid XHTML but valid HTML, right?" =>
"This is invalid XHTML but valid HTML, right?",
"
Everything goes!
" => "Everything goes!",
"This is completely invalid and just plain wrong" =>
"This is completely invalid and just plain wrong"
}.each do |html, plain|
assert_equal plain, html.strip_html_tags
end
end
def test_convert_accented_entities
{
"å" => "a",
"è" => "e",
"î" => "i",
"Ø" => "O",
"ü" => "u",
"Ñ" => "N",
"ç" => "c"
}.each do |entitied, plain|
assert_equal plain, entitied.convert_accented_entities
end
end
def test_convert_vulgar_fractions
{
"¼" => "one fourth",
"¼" => "one fourth",
"¼" => "one fourth",
"½" => "half",
"½" => "half",
"½" => "half",
"¾" => "three fourths",
"¾" => "three fourths",
"¾" => "three fourths",
"⅓" => "one third",
"⅓" => "one third",
"⅔" => "two thirds",
"⅔" => "two thirds",
"⅕" => "one fifth",
"⅕" => "one fifth",
"⅖" => "two fifths",
"⅖" => "two fifths",
"⅗" => "three fifths",
"⅗" => "three fifths",
"⅘" => "four fifths",
"⅘" => "four fifths",
"⅙" => "one sixth",
"⅙" => "one sixth",
"⅚" => "five sixths",
"⅚" => "five sixths",
"⅛" => "one eighth",
"⅛" => "one eighth",
"⅜" => "three eighths",
"⅜" => "three eighths",
"⅝" => "five eighths",
"⅝" => "five eighths",
"⅞" => "seven eighths",
"⅞" => "seven eighths"
}.each do |entitied, plain|
assert_equal plain, entitied.convert_vulgar_fractions
end
end
def test_convert_misc_entities
{
"America™" => "America(tm)",
"Tea & Sympathy" => "Tea and Sympathy",
"To be continued…" => "To be continued...",
"Foo Bar" => "Foo Bar",
"100£" => "100 pound",
"35°" => "35 degrees"
}.each do |entitied, plain|
assert_equal plain, entitied.convert_misc_entities
end
end
def test_convert_smart_punctuation
{
"“smart quotes”" => '"smart quotes"',
"‘dumb quotes’" => "'dumb quotes'",
"I love you, but…" => "I love you, but...",
}.each do |smart, plain|
assert_equal plain, smart.convert_smart_punctuation
end
end
def test_convert_misc_characters
{
"Foo & bar make foobar" => "Foo and bar make foobar",
"Breakdown #9" => "Breakdown number 9",
"foo@bar.com" => "foo at bar dot com",
"100% of yr love" => "100 percent of yr love",
"Kisses are $3.25 each" => "Kisses are 3 dollars 25 cents each",
"That CD is £3.25 plus tax" => "That CD is 3 pounds 25 pence plus tax",
"This CD is ¥1000 instead" => "This CD is 1000 yen instead",
"Food+Drink" => "Food plus Drink"
}.each do |misc, plain|
assert_equal plain, misc.convert_misc_characters
end
end
def test_replace_whitespace
{
"this has too much space" => "this has too much space",
"\t\tThis is merely formatted with superfluous whitespace\n" =>
" This is merely formatted with superfluous whitespace "
}.each do |whitespaced, plain|
assert_equal plain, whitespaced.replace_whitespace
end
assert_equal "now-with-more-hyphens", "now with more hyphens".replace_whitespace("-")
end
def test_collapse
{
"too much space" => "too much space",
" at the beginning" => "at the beginning"
}.each do |uncollapsed, plain|
assert_equal plain, uncollapsed.collapse
end
assert_equal "now-with-hyphens", "----now---------with-hyphens--------".collapse("-")
end
end