blob: f346fcb27ef01f30f4042dc10b376b0142d3df7d [file] [log] [blame]
// Copyright 2007, 2011 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.util;
import java.util.List;
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.services.CoercionTuple;
import org.apache.tapestry5.ioc.services.TypeCoercer;
import org.apache.tapestry5.ioc.util.UnknownValueException;
import org.testng.annotations.Test;
public class EnumValueEncoderTest extends InternalBaseTestCase
{
private enum Stooge
{
MOE, LARRY, CURLY_JOE
}
@Test
// TAP5-1331
public void valid_values_can_be_retrieved_from_exception()
{
TypeCoercer typeCoercer = getService(TypeCoercer.class);
EnumValueEncoder<Stooge> encoder = new EnumValueEncoder<Stooge>(typeCoercer, Stooge.class);
try
{
encoder.toValue("Foo");
fail();
} catch (RuntimeException e){
assertTrue(e.getCause() instanceof UnknownValueException);
UnknownValueException cause = (UnknownValueException) e.getCause();
List<String> availableValues = cause.getAvailableValues().getValues();
assertTrue(availableValues.contains("MOE"));
assertTrue(availableValues.contains("LARRY"));
assertTrue(availableValues.contains("CURLY_JOE"));
}
}
@Test
// TAP5-2496
public void roundtrip_with_custom_coercer()
{
CoercionTuple<Stooge, String> stoogeToString = CoercionTuple.create(Stooge.class, String.class, new Coercion<Stooge, String>(){
@Override
public String coerce(Stooge input) {
return String.valueOf(input.ordinal());
}
});
CoercionTuple<String, Stooge> stringToStooge = CoercionTuple.create(String.class, Stooge.class, new Coercion<String, Stooge>(){
@Override
public Stooge coerce(String input) {
return Stooge.values()[Integer.parseInt(input)];
}
});
TypeCoercer typeCoercer = new TypeCoercerImpl(CollectionFactory.<CoercionTuple, CoercionTuple>newList(stoogeToString, stringToStooge));
EnumValueEncoder<Stooge> encoder = new EnumValueEncoder<Stooge>(typeCoercer, Stooge.class);
Stooge serverValue = Stooge.LARRY;
String clientValue = encoder.toClient(serverValue);
Stooge convertedBack = encoder.toValue(clientValue);
assertEquals(convertedBack, serverValue);
}
}