// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/service/TestServiceAsync.java
// public interface TestServiceAsync {
// 
//   void getRpcTestValue(AsyncCallback<RpcTestValue> async);
// 
//   void getRpcTestValueList(AsyncCallback<List<RpcTestValue>> async);
// 
//   void getRpcTestValueStringMap(AsyncCallback<Map<RpcTestMapKey, RpcTestMapValue>> async);
// 
//   void testDeserialization(TestValue className, String serialized, TestValue stored, AsyncCallback<TestValue> async);
// 
//   void testGenericDeserialization(GenericTestValue<TestValue> value1, String serialized, AsyncCallback<GenericTestValue<TestValue>> async);
// 
//   void testSerialization(TestValue value, String serialized, TestValue stored, AsyncCallback<String> async);
// 
//   void testGenericSerialization(GenericTestValue<TestValue> value1, String serialized, AsyncCallback<String> async);
// }
// 
// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/value/GenericTestValue.java
// public class GenericTestValue<T extends TestValue> implements IsSerializable{
// 
//   private T testValue;
// 
//   public GenericTestValue(){
// 
//   }
// 
//   public GenericTestValue(T testValue){
//     this.testValue = testValue;
//   }
// 
//   public T getTestValue(){
//     return testValue;
//   }
// 
//   public void setTestValue(T testValue){
//     this.testValue = testValue;
//   }
// 
//   @Override
//   public boolean equals(Object o){
//     if(this == o) return true;
//     if(!(o instanceof GenericTestValue)) return false;
// 
//     GenericTestValue that = (GenericTestValue)o;
// 
//     if(!testValue.equals(that.testValue)) return false;
// 
//     return true;
//   }
// 
//   @Override
//   public int hashCode(){
//     return testValue.hashCode();
//   }
// }
// 
// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/value/TestValue.java
// public class TestValue implements Serializable {
// 
//   private String value;
// 
//   public TestValue(){}
// 
//   public TestValue(String value){
//     this.value = value;
//   }
// 
//   public String getValue() {
//     return value;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (!(o instanceof TestValue)) return false;
// 
//     TestValue testValue = (TestValue) o;
// 
//     return value == null ? (testValue.value == null) : value.equals(testValue.value);
//   }
// 
//   @Override
//   public int hashCode() {
//     return value.hashCode();
//   }
// }


import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.Style;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.ui.*;
import com.seanchenxi.gwt.storage.client.service.TestServiceAsync;
import com.seanchenxi.gwt.storage.client.value.GenericTestValue;
import com.seanchenxi.gwt.storage.client.value.TestValue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
      public boolean execute() {
        final String name = "testPut_" + key.name() + "_Value";
        try{
          final int expectedSize = CURRENT_STORAGE.size() + 1;
          CURRENT_STORAGE.put(key, (T) value1);
          firstAssertGroup(name, expectedSize, key, value1);

          final String serialized = CURRENT_STORAGE.getString(key.name());
          final T stored = CURRENT_STORAGE.get(key);
          if(value1 instanceof TestValue){
            TEST_SERVICE_ASYNC.testDeserialization((TestValue)value1, serialized, (TestValue)stored, new AsyncCallback<TestValue>() {
              @Override
              public void onFailure(Throwable throwable) {
                traceError(name + "_RPC", "see server log", "see server log");
                GWT.log(name + "_RPC", throwable);
              }

              @Override
              public void onSuccess(TestValue severDeserialized) {
                assertEquals(name + "_RPC", value1, severDeserialized);
              }
            });
            TEST_SERVICE_ASYNC.testSerialization((TestValue)value1, serialized, (TestValue)stored, new AsyncCallback<String>() {
              @Override
              public void onFailure(Throwable throwable) {
                traceError(name + "_RPC", "see server log", "see server log");
                GWT.log(name + "_RPC", throwable);
              }

              @Override
// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/service/TestServiceAsync.java
// public interface TestServiceAsync {
// 
//   void getRpcTestValue(AsyncCallback<RpcTestValue> async);
// 
//   void getRpcTestValueList(AsyncCallback<List<RpcTestValue>> async);
// 
//   void getRpcTestValueStringMap(AsyncCallback<Map<RpcTestMapKey, RpcTestMapValue>> async);
// 
//   void testDeserialization(TestValue className, String serialized, TestValue stored, AsyncCallback<TestValue> async);
// 
//   void testGenericDeserialization(GenericTestValue<TestValue> value1, String serialized, AsyncCallback<GenericTestValue<TestValue>> async);
// 
//   void testSerialization(TestValue value, String serialized, TestValue stored, AsyncCallback<String> async);
// 
//   void testGenericSerialization(GenericTestValue<TestValue> value1, String serialized, AsyncCallback<String> async);
// }
// 
// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/value/GenericTestValue.java
// public class GenericTestValue<T extends TestValue> implements IsSerializable{
// 
//   private T testValue;
// 
//   public GenericTestValue(){
// 
//   }
// 
//   public GenericTestValue(T testValue){
//     this.testValue = testValue;
//   }
// 
//   public T getTestValue(){
//     return testValue;
//   }
// 
//   public void setTestValue(T testValue){
//     this.testValue = testValue;
//   }
// 
//   @Override
//   public boolean equals(Object o){
//     if(this == o) return true;
//     if(!(o instanceof GenericTestValue)) return false;
// 
//     GenericTestValue that = (GenericTestValue)o;
// 
//     if(!testValue.equals(that.testValue)) return false;
// 
//     return true;
//   }
// 
//   @Override
//   public int hashCode(){
//     return testValue.hashCode();
//   }
// }
// 
// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/value/TestValue.java
// public class TestValue implements Serializable {
// 
//   private String value;
// 
//   public TestValue(){}
// 
//   public TestValue(String value){
//     this.value = value;
//   }
// 
//   public String getValue() {
//     return value;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (!(o instanceof TestValue)) return false;
// 
//     TestValue testValue = (TestValue) o;
// 
//     return value == null ? (testValue.value == null) : value.equals(testValue.value);
//   }
// 
//   @Override
//   public int hashCode() {
//     return value.hashCode();
//   }
// }


// Path: examples/serializer-test/src/main/java/com/seanchenxi/gwt/storage/client/StorageTestUtil.java
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.Style;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.ui.*;
import com.seanchenxi.gwt.storage.client.service.TestServiceAsync;
import com.seanchenxi.gwt.storage.client.value.GenericTestValue;
import com.seanchenxi.gwt.storage.client.value.TestValue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

      public boolean execute() {
        final String name = "testPut_" + key.name() + "_Value";
        try{
          final int expectedSize = CURRENT_STORAGE.size() + 1;
          CURRENT_STORAGE.put(key, (T) value1);
          firstAssertGroup(name, expectedSize, key, value1);

          final String serialized = CURRENT_STORAGE.getString(key.name());
          final T stored = CURRENT_STORAGE.get(key);
          if(value1 instanceof TestValue){
            TEST_SERVICE_ASYNC.testDeserialization((TestValue)value1, serialized, (TestValue)stored, new AsyncCallback<TestValue>() {
              @Override
              public void onFailure(Throwable throwable) {
                traceError(name + "_RPC", "see server log", "see server log");
                GWT.log(name + "_RPC", throwable);
              }

              @Override
              public void onSuccess(TestValue severDeserialized) {
                assertEquals(name + "_RPC", value1, severDeserialized);
              }
            });
            TEST_SERVICE_ASYNC.testSerialization((TestValue)value1, serialized, (TestValue)stored, new AsyncCallback<String>() {
              @Override
              public void onFailure(Throwable throwable) {
                traceError(name + "_RPC", "see server log", "see server log");
                GWT.log(name + "_RPC", throwable);
              }

              @Override
              public void onSuccess(String serverSerialized) {