// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderString.java
// public interface UnderString {
//     static String reverse(CharSequence s) {
//         return new StringBuilder(s).reverse().toString();
//     }
// 
//     static <T> String commaSep(List<T> list) {
//         return join(",", list);
//     }
// 
//     static String join(Iterable<String> coll) {
//         StringBuilder sb = new StringBuilder();
//         map(coll, sb::append);
//         return sb.toString();
//     }
// 
//     static String join(Object... os) {
//         return join(map(os, Object::toString));
//     }
// 
//     static <T> String join(String separator, Iterable<T> coll) {
//         Iterator<T> iterator = coll.iterator();
// 
//         StringBuilder sb;
// 
//         if (iterator.hasNext()) {
//             sb = new StringBuilder(iterator.next().toString());
//         } else {
//             return "";
//         }
// 
//         while (iterator.hasNext()) {
//             sb.append(separator).append(iterator.next());
//         }
// 
//         return sb.toString();
//     }
// 
//     static <V> String toString(V v) {
//         return v.toString();
//     }
// 
//     static String urlEncode(String s) {
//         return rethrow(() -> URLEncoder.encode(s, "UTF-8"));
//     }
// 
//     static boolean hasContent(String s) {
//         return s.trim().length() > 0;
//     }
// 
// 
// }
// 
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderString.java
// public interface UnderString {
//     static String reverse(CharSequence s) {
//         return new StringBuilder(s).reverse().toString();
//     }
// 
//     static <T> String commaSep(List<T> list) {
//         return join(",", list);
//     }
// 
//     static String join(Iterable<String> coll) {
//         StringBuilder sb = new StringBuilder();
//         map(coll, sb::append);
//         return sb.toString();
//     }
// 
//     static String join(Object... os) {
//         return join(map(os, Object::toString));
//     }
// 
//     static <T> String join(String separator, Iterable<T> coll) {
//         Iterator<T> iterator = coll.iterator();
// 
//         StringBuilder sb;
// 
//         if (iterator.hasNext()) {
//             sb = new StringBuilder(iterator.next().toString());
//         } else {
//             return "";
//         }
// 
//         while (iterator.hasNext()) {
//             sb.append(separator).append(iterator.next());
//         }
// 
//         return sb.toString();
//     }
// 
//     static <V> String toString(V v) {
//         return v.toString();
//     }
// 
//     static String urlEncode(String s) {
//         return rethrow(() -> URLEncoder.encode(s, "UTF-8"));
//     }
// 
//     static boolean hasContent(String s) {
//         return s.trim().length() > 0;
//     }
// 
// 
// }
// 
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderBar.java
// @SafeVarargs
// static <T> List<T> list(T... ts) {
//     return Arrays.asList(ts);
// }
// 
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderBar.java
// static <T, F> List<T> map(Iterable<F> fs, Function<F, T> toT) {
//     return stream(fs).map(toT).collect(toList());
// }


import com.tailoredshapes.underbar.ocho.UnderString;
import org.junit.Test;
import static com.tailoredshapes.underbar.ocho.UnderString.*;
import static com.tailoredshapes.underbar.ocho.UnderBar.list;
import static com.tailoredshapes.underbar.ocho.UnderBar.map;
import static org.junit.Assert.*;

    @Test
    public void joinTest() throws Exception {
        assertEquals("1+2+3", join("+", list(1,2,3)));
    }

    @Test
    public void joinNoSeperatorTest() throws Exception {
        assertEquals("123", join(list("1","2","3")));
    }

    @Test
    public void joinArray() throws Exception {
        assertEquals("123", join("1","2","3"));
        assertEquals("123", join(1,2,3));
    }


    @Test
    public void toStringTest() throws Exception {
        assertEquals("1", UnderString.toString(1));
    }

    @Test
    public void urlEncodeTest() throws Exception {
        assertEquals("foo%7Cbar%2Bspam", urlEncode("foo|bar+spam"));
    }

    @Test
    public void hasContentTest() throws Exception {
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderString.java
// public interface UnderString {
//     static String reverse(CharSequence s) {
//         return new StringBuilder(s).reverse().toString();
//     }
// 
//     static <T> String commaSep(List<T> list) {
//         return join(",", list);
//     }
// 
//     static String join(Iterable<String> coll) {
//         StringBuilder sb = new StringBuilder();
//         map(coll, sb::append);
//         return sb.toString();
//     }
// 
//     static String join(Object... os) {
//         return join(map(os, Object::toString));
//     }
// 
//     static <T> String join(String separator, Iterable<T> coll) {
//         Iterator<T> iterator = coll.iterator();
// 
//         StringBuilder sb;
// 
//         if (iterator.hasNext()) {
//             sb = new StringBuilder(iterator.next().toString());
//         } else {
//             return "";
//         }
// 
//         while (iterator.hasNext()) {
//             sb.append(separator).append(iterator.next());
//         }
// 
//         return sb.toString();
//     }
// 
//     static <V> String toString(V v) {
//         return v.toString();
//     }
// 
//     static String urlEncode(String s) {
//         return rethrow(() -> URLEncoder.encode(s, "UTF-8"));
//     }
// 
//     static boolean hasContent(String s) {
//         return s.trim().length() > 0;
//     }
// 
// 
// }
// 
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderString.java
// public interface UnderString {
//     static String reverse(CharSequence s) {
//         return new StringBuilder(s).reverse().toString();
//     }
// 
//     static <T> String commaSep(List<T> list) {
//         return join(",", list);
//     }
// 
//     static String join(Iterable<String> coll) {
//         StringBuilder sb = new StringBuilder();
//         map(coll, sb::append);
//         return sb.toString();
//     }
// 
//     static String join(Object... os) {
//         return join(map(os, Object::toString));
//     }
// 
//     static <T> String join(String separator, Iterable<T> coll) {
//         Iterator<T> iterator = coll.iterator();
// 
//         StringBuilder sb;
// 
//         if (iterator.hasNext()) {
//             sb = new StringBuilder(iterator.next().toString());
//         } else {
//             return "";
//         }
// 
//         while (iterator.hasNext()) {
//             sb.append(separator).append(iterator.next());
//         }
// 
//         return sb.toString();
//     }
// 
//     static <V> String toString(V v) {
//         return v.toString();
//     }
// 
//     static String urlEncode(String s) {
//         return rethrow(() -> URLEncoder.encode(s, "UTF-8"));
//     }
// 
//     static boolean hasContent(String s) {
//         return s.trim().length() > 0;
//     }
// 
// 
// }
// 
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderBar.java
// @SafeVarargs
// static <T> List<T> list(T... ts) {
//     return Arrays.asList(ts);
// }
// 
// Path: underbar.ocho/src/main/java/com/tailoredshapes/underbar/ocho/UnderBar.java
// static <T, F> List<T> map(Iterable<F> fs, Function<F, T> toT) {
//     return stream(fs).map(toT).collect(toList());
// }


// Path: underbar.ocho/src/test/java/com/tailoredshapes/underbar/ocho/UnderStringTest.java
import com.tailoredshapes.underbar.ocho.UnderString;
import org.junit.Test;
import static com.tailoredshapes.underbar.ocho.UnderString.*;
import static com.tailoredshapes.underbar.ocho.UnderBar.list;
import static com.tailoredshapes.underbar.ocho.UnderBar.map;
import static org.junit.Assert.*;


    @Test
    public void joinTest() throws Exception {
        assertEquals("1+2+3", join("+", list(1,2,3)));
    }

    @Test
    public void joinNoSeperatorTest() throws Exception {
        assertEquals("123", join(list("1","2","3")));
    }

    @Test
    public void joinArray() throws Exception {
        assertEquals("123", join("1","2","3"));
        assertEquals("123", join(1,2,3));
    }


    @Test
    public void toStringTest() throws Exception {
        assertEquals("1", UnderString.toString(1));
    }

    @Test
    public void urlEncodeTest() throws Exception {
        assertEquals("foo%7Cbar%2Bspam", urlEncode("foo|bar+spam"));
    }

    @Test
    public void hasContentTest() throws Exception {
        assertTrue(hasContent("  floops  "));