/*
* Copyright 2013 Nicolas Morel
*
* 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 com.github.nmorel.gwtjackson.shared.advanced;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.github.nmorel.gwtjackson.shared.AbstractTester;
import com.github.nmorel.gwtjackson.shared.ObjectReaderTester;
import com.github.nmorel.gwtjackson.shared.ObjectWriterTester;
/**
* @author Nicolas Morel
*/
public final class PrivateAccessTester extends AbstractTester {
@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.ANY, setterVisibility = JsonAutoDetect.Visibility.ANY)
@JsonPropertyOrder(alphabetic = true)
public static class PrivateBean {
@JsonProperty(value = "private")
private String privateField;
private boolean usedPrivateGetter;
private boolean usedPrivateSetter;
private PrivateBean privateAccessors;
private PrivateBean getPrivateAccessors() {
usedPrivateGetter = true;
return privateAccessors;
}
private void setPrivateAccessors( PrivateBean privateAccessors ) {
usedPrivateSetter = true;
this.privateAccessors = privateAccessors;
}
}
public static final PrivateAccessTester INSTANCE = new PrivateAccessTester();
private PrivateAccessTester() {
}
public void testSerializePrivateField( ObjectWriterTester<PrivateBean> writer ) {
PrivateBean bean = new PrivateBean();
bean.privateField = "IAmAPrivateField";
PrivateBean internalBean = new PrivateBean();
internalBean.privateField = "IHavePrivateAccessors";
bean.privateAccessors = internalBean;
String expected = "{\"private\":\"IAmAPrivateField\",\"privateAccessors\":{\"private\":\"IHavePrivateAccessors\"," +
"" + "\"privateAccessors\":null}}";
String result = writer.write( bean );
assertTrue( bean.usedPrivateGetter );
assertFalse( bean.usedPrivateSetter );
assertEquals( expected, result );
}
public void testDeserializePrivateField( ObjectReaderTester<PrivateBean> reader ) {
String input = "{\"private\":\"IAmAPrivateField\",\"privateAccessors\":{\"private\":\"IHavePrivateAccessors\"}}";
PrivateBean result = reader.read( input );
assertTrue( result.usedPrivateSetter );
assertFalse( result.usedPrivateGetter );
assertEquals( "IAmAPrivateField", result.privateField );
assertEquals( "IHavePrivateAccessors", result.privateAccessors.privateField );
}
}