/*
* Copyright 2010 Martin Grotzke
*
* 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 de.javakaffee.kryoserializers.wicket;
import static de.javakaffee.kryoserializers.KryoTest.deserialize;
import static de.javakaffee.kryoserializers.KryoTest.serialize;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.util.tester.WicketTester;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.serializers.FieldSerializer;
import de.javakaffee.kryoserializers.KryoReflectionFactorySupport;
import de.javakaffee.kryoserializers.KryoTest;
/**
* A general test for several wicket serializations that don't require
* specific serializers.
*
* @author <a href="mailto:martin.grotzke@javakaffee.de">Martin Grotzke</a>
*/
public class WicketTest {
public static final String SERIALIZED_CLASS_NAME = MarkupContainer.class.getName() + "$ChildList";
private Kryo _kryo;
private WicketTester _wicketTester;
@BeforeTest
@SuppressWarnings( "unchecked" )
protected void beforeTest() {
_kryo = new KryoReflectionFactorySupport() {
@SuppressWarnings("rawtypes")
@Override
public Serializer getDefaultSerializer( final Class type ) {
if ( SERIALIZED_CLASS_NAME.equals( type.getName() ) ) {
return new FieldSerializer<Object>( this, type );
}
return super.getDefaultSerializer(type);
}
};
_kryo.setRegistrationRequired( false );
final WebApplication application = new WebApplication() {
@Override
public Class<? extends Page> getHomePage() {
return null;
}
};
_wicketTester = new WicketTester( application );
}
@AfterTest
protected void afterTest() {
_wicketTester.destroy();
}
/**
* Tests that MarkupContainer.ChildList is serialized/deserialized correctly.
* It needs ReflectionFactory support, ReferenceFieldSerializer as default
* serializer and the FieldSerializer for MarkupContainer.ChildList (instead of
* default CollectionSerializer).
*
* @throws Exception
*/
@Test( enabled = true )
public void testMarkupContainerChildList() throws Exception {
final MarkupContainer markupContainer = new WebMarkupContainer("foo");
markupContainer.add( new Label( "label1", "foo" ) );
markupContainer.add( new Label( "label", "hello" ) );
final byte[] serialized = serialize( _kryo, markupContainer );
final MarkupContainer deserialized = deserialize( _kryo, serialized, markupContainer.getClass() );
KryoTest.assertDeepEquals( deserialized, markupContainer );
}
@Test( enabled = true )
public void testFeedbackPanel() throws Exception {
final FeedbackPanel markupContainer = new FeedbackPanel("foo");
//markupContainer.info( "foo" );
final Component child = markupContainer.get( 0 );
child.isVisible();
final byte[] serialized = serialize( _kryo, markupContainer );
final MarkupContainer deserialized = deserialize( _kryo, serialized, markupContainer.getClass() );
final Component deserializedChild = deserialized.get( 0 );
deserializedChild.isVisible();
KryoTest.assertDeepEquals( deserialized, markupContainer );
}
}