package org.eclipse.openk.elogbook.common;

import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import org.junit.Test;

import java.lang.reflect.Type;
import java.util.Calendar;

public class GsonUTCDateAdapterTest {

    @Test
    public void serializeTest() {
        GsonUTCDateAdapter gsonUTCDateAdapter = new GsonUTCDateAdapter();
        Calendar calendar = Calendar.getInstance();
        java.util.Date date = calendar.getTime();
        Type type = new Type() {
            @Override
            public String getTypeName() {
                return null;
            }
        };
        JsonSerializationContext jsonSerializationContext = new JsonSerializationContext() {
            @Override
            public JsonElement serialize(Object o) {
                return null;
            }

            @Override
            public JsonElement serialize(Object o, Type type) {
                return null;
            }
        };

        gsonUTCDateAdapter.serialize(date, type, jsonSerializationContext);
    }

}
