### Question:
TextValue extends ScalarValue { public abstract TextValue toUpper(); TextValue(); abstract String stringValue(); abstract int length(); abstract TextValue substring( int start, int length ); TextValue substring( int start ); abstract TextValue trim(); abstract TextValue ltrim(); abstract TextValue rtrim(); abstract TextValue toLower(); abstract TextValue toUpper(); abstract ListValue split( String separator ); abstract TextValue replace( String find, String replace ); abstract TextValue reverse(); abstract TextValue plus( TextValue other ); abstract boolean startsWith( TextValue other ); abstract boolean endsWith( TextValue other ); abstract boolean contains( TextValue other ); abstract int compareTo( TextValue other ); @Override final boolean equals( boolean x ); @Override final boolean equals( long x ); @Override final boolean equals( double x ); @Override ValueGroup valueGroup(); @Override NumberType numberType(); @Override T map( ValueMapper<T> mapper );  }### Answer:
@Test public void toUpper() { assertThat( value.apply( "HELLO" ).toUpper(), equalTo( value.apply( "HELLO" ) ) ); assertThat( value.apply( "Hello" ).toUpper(), equalTo( value.apply( "HELLO" ) ) ); assertThat( value.apply( "hello" ).toUpper(), equalTo( value.apply( "HELLO" ) ) ); assertThat( value.apply( "" ).toUpper(), equalTo( value.apply( "" ) ) ); }