package com.twitter.elephantbird.util;
import com.google.common.collect.ImmutableMap;
import com.twitter.elephantbird.util.Strings;
import org.junit.Test;
import java.util.Map;
import static junit.framework.Assert.assertEquals;
/**
* Tests for Strings.
*
* Largely taken from the defunct rogueweb project at
* <link>http://code.google.com/p/rogueweb/</link>
* Original author Anthony Eden.
*/
public class TestStrings {
private static final Map<String, String> singularToPlural_ = ImmutableMap.<String, String>builder()
.put("search", "searches")
.put("switch", "switches")
.put("fix", "fixes")
.put("box", "boxes")
.put("process", "processes")
.put("address", "addresses")
.put("case", "cases")
.put("stack", "stacks")
.put("wish", "wishes")
.put("fish", "fish")
.put("category", "categories")
.put("query", "queries")
.put("ability", "abilities")
.put("agency", "agencies")
.put("movie", "movies")
.put("company", "companies")
.put("archive", "archives")
.put("index", "indices")
.put("wife", "wives")
.put("safe", "saves")
.put("half", "halves")
.put("move", "moves")
.put("salesperson", "salespeople")
.put("person", "people")
.put("spokesman", "spokesmen")
.put("man", "men")
.put("woman", "women")
.put("basis", "bases")
.put("diagnosis", "diagnoses")
.put("datum", "data")
.put("medium", "media")
.put("analysis", "analyses")
.put("node_child", "node_children")
.put("child", "children")
.put("experience", "experiences")
.put("day", "days")
.put("comment", "comments")
.put("foobar", "foobars")
.put("newsletter", "newsletters")
.put("old_news", "old_news")
.put("news", "news")
.put("series", "series")
.put("species", "species")
.put("quiz", "quizzes")
.put("perspective", "perspectives")
.put("ox", "oxen")
.put("photo", "photos")
.put("buffalo", "buffaloes")
.put("tomato", "tomatoes")
.put("dwarf", "dwarves")
.put("elf", "elves")
.put("information", "information")
.put("equipment", "equipment")
.put("bus", "buses")
.put("status", "statuses")
.put("status_code", "status_codes")
.put("mouse", "mice")
.put("louse", "lice")
.put("house", "houses")
.put("octopus", "octopi")
.put("virus", "viri")
.put("alias", "aliases")
.put("portfolio", "portfolios")
.put("vertex", "vertices")
.put("matrix", "matrices")
.put("axis", "axes")
.put("testis", "testes")
.put("crisis", "crises")
.put("rice", "rice")
.put("shoe", "shoes")
.put("horse", "horses")
.put("prize", "prizes")
.put("edge", "edges")
.build();
private static final Map<String, String> mixtureToTitleCase_ = ImmutableMap.<String, String>builder()
.put("active_record", "Active Record")
.put("ActiveRecord", "Active Record")
.put("action web service", "Action Web Service")
.put("Action Web Service", "Action Web Service")
.put("Action web service", "Action Web Service")
.put("actionwebservice", "Actionwebservice")
.put("Actionwebservice", "Actionwebservice")
.build();
private static final Map<String, String> camelToUnderscore_ = ImmutableMap.<String, String>builder()
.put("Product", "product")
.put("SpecialGuest", "special_guest")
.put("ApplicationController", "application_controller")
.put("Area51Controller", "area51_controller")
.put("InnerClass$Test", "inner_class__test")
.build();
private static final Map<String, String> camelToUnderscoreWithoutReverse_ = ImmutableMap.<String, String>builder()
.put("HTMLTidy", "html_tidy")
.put("HTMLTidyGenerator", "html_tidy_generator")
.put("FreeBSD", "free_bsd")
.put("HTML", "html")
.build();
private static final Map<String, String> camelWithPackageToUnderscoreWithSlash_ = ImmutableMap.<String, String>builder()
.put("admin.Product", "admin/product")
.put("users.commission.Department", "users/commission/department")
.put("usersSection.CommissionDepartment", "users_section/commission_department")
.build();
private static final Map<String, String> classNameToForeignKeyWithUnderscore_ = ImmutableMap.<String, String>builder()
.put("Person", "person_id")
.put("application.billing.Account", "account_id")
.build();
private static final Map<String, String> classNameToTableName_ = ImmutableMap.<String, String>builder()
.put("PrimarySpokesman", "primary_spokesmen")
.put("NodeChild", "node_children")
.build();
private static final Map<String, String> underscoreToHuman_ = ImmutableMap.<String, String>builder()
.put("employee_salary", "Employee salary")
.put("employee_id", "Employee")
.put("underground", "Underground")
.build();
private static final Map<Integer, String> ordinalNumbers_ = ImmutableMap.<Integer, String>builder()
.put(0, "0th")
.put(1, "1st")
.put(2, "2nd")
.put(3, "3rd")
.put(4, "4th")
.put(5, "5th")
.put(6, "6th")
.put(7, "7th")
.put(8, "8th")
.put(9, "9th")
.put(10, "10th")
.put(11, "11th")
.put(12, "12th")
.put(13, "13th")
.put(14, "14th")
.put(20, "20th")
.put(21, "21st")
.put(22, "22nd")
.put(23, "23rd")
.put(24, "24th")
.put(100, "100th")
.put(101, "101st")
.put(102, "102nd")
.put(103, "103rd")
.put(104, "104th")
.put(110, "110th")
.put(1000, "1000th")
.put(1001, "1001st")
.put(10013, "10013th")
.build();
private static final Map<String, String> underscoresToDashes_ = ImmutableMap.<String, String>builder()
.put("street", "street")
.put("street_address", "street-address")
.put("person_street_address", "person-street-address")
.build();
private static final Map<String, String> underscoreToLowerCamel_ = ImmutableMap.<String, String>builder()
.put("product","product")
.put("special_guest","specialGuest")
.put("application_controller","applicationController")
.put("area51_controller","area51Controller")
.build();
@Test
public void testPluralizePlurals() {
assertEquals("plurals", Strings.pluralize("plurals"));
assertEquals("Plurals", Strings.pluralize("Plurals"));
}
@Test
public void testPluralize() {
for (Map.Entry<String, String> entry : singularToPlural_.entrySet()) {
String singular = entry.getKey();
String plural = entry.getValue();
assertEquals(plural, Strings.pluralize(singular));
assertEquals(Strings.capitalize(plural),
Strings.pluralize(Strings.capitalize(singular)));
}
}
@Test
public void testSingularize() {
for (Map.Entry<String, String> entry : singularToPlural_.entrySet()) {
String singular = entry.getKey();
String plural = entry.getValue();
assertEquals(singular, Strings.singularize(plural));
assertEquals(Strings.capitalize(singular),
Strings.singularize(Strings.capitalize(plural)));
}
}
@Test
public void testTitleize() {
for (Map.Entry<String, String> entry : mixtureToTitleCase_.entrySet()) {
assertEquals(entry.getValue(), Strings.titleize(entry.getKey()));
}
}
@Test
public void testCamelize() {
for (Map.Entry<String, String> entry : camelToUnderscore_.entrySet()) {
assertEquals(entry.getKey(), Strings.camelize(entry.getValue()));
}
}
@Test
public void testUnderscore() {
for (Map.Entry<String, String> entry : camelToUnderscore_.entrySet()) {
assertEquals(entry.getValue(), Strings.underscore(entry.getKey()));
}
for (Map.Entry<String, String> entry : camelToUnderscoreWithoutReverse_.entrySet()) {
assertEquals(entry.getValue(), Strings.underscore(entry.getKey()));
}
}
@Test
public void testCamelizeWithPackage() {
for (Map.Entry<String, String> entry : camelWithPackageToUnderscoreWithSlash_.entrySet()) {
assertEquals(entry.getKey(), Strings.camelize(entry.getValue()));
}
}
@Test
public void testUnderscoreWithSlashes() {
for (Map.Entry<String, String> entry : camelWithPackageToUnderscoreWithSlash_.entrySet()) {
assertEquals(entry.getValue(), Strings.underscore(entry.getKey()));
}
}
@Test
public void testDepackage() {
assertEquals("Account", Strings.depackage("application.billing.Account"));
}
@Test
public void testForeignKey() {
for (Map.Entry<String, String> entry : classNameToForeignKeyWithUnderscore_.entrySet()) {
assertEquals(entry.getValue(), Strings.foreignKey(entry.getKey()));
}
}
@Test
public void testTableize() {
for (Map.Entry<String, String> entry : classNameToTableName_.entrySet()) {
assertEquals(entry.getValue(), Strings.tableize(entry.getKey()));
}
}
@Test
public void testClassify() {
for (Map.Entry<String, String> entry : classNameToTableName_.entrySet()) {
assertEquals(entry.getKey(), Strings.classify(entry.getValue()));
}
}
@Test
public void testHumanize() {
for (Map.Entry<String, String> entry : underscoreToHuman_.entrySet()) {
assertEquals(entry.getValue(), Strings.humanize(entry.getKey()));
}
}
@Test
public void testOrdinal() {
for (Map.Entry<Integer, String> entry : ordinalNumbers_.entrySet()) {
assertEquals(entry.getValue(), Strings.ordinalize(entry.getKey()));
assertEquals(entry.getValue(), Strings.ordinalize(entry.getKey()));
}
}
@Test
public void testDasherize() {
for (Map.Entry<String, String> entry : underscoresToDashes_.entrySet()) {
assertEquals(entry.getValue(), Strings.dasherize(entry.getKey()));
}
}
@Test
public void testUnderscoredAsReverseOfDasherize() {
for (Map.Entry<String, String> entry : underscoresToDashes_.entrySet()) {
assertEquals(entry.getKey(), Strings.underscore(Strings.dasherize(entry.getKey())));
}
}
@Test
public void testUnderscoreToLowerCamel() {
for (Map.Entry<String, String> entry : underscoreToLowerCamel_.entrySet()) {
assertEquals(entry.getValue(), Strings.camelize(entry.getKey(), true));
}
}
@Test
public void testCapitalize() {
assertEquals("Foo bar baz", Strings.capitalize("foo bar baz"));
}
@Test
public void testClassNameToTableName() {
assertEquals("companies", Strings.tableize("com.aetrion.activerecord.fixture.Companies"));
}
}