### Question:
TextValue extends ScalarValue { public abstract TextValue rtrim(); 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 rtrim() { assertThat( value.apply( "HELLO " ).rtrim(), equalTo( value.apply( "HELLO" ) ) ); assertThat( value.apply( "Hello " ).rtrim(), equalTo( value.apply( "Hello" ) ) ); assertThat( value.apply( " hello " ).rtrim(), equalTo( value.apply( " hello" ) ) ); assertThat( value.apply( "\u2009㺂࿝鋦毠\u2009" ).rtrim(), equalTo( value.apply( "\u2009㺂࿝鋦毠" ) ) ); }