/* * Copyright Terracotta, Inc. * * 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.ehcache.impl.internal.store.heap.holders; import org.ehcache.impl.copy.IdentityCopier; import org.ehcache.impl.copy.ReadWriteCopier; import org.junit.Test; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; /** * Created by alsu on 20/08/15. */ public class CopiedOnHeapValueHolderTest { @Test public void testValueByValue() throws Exception { Person person = new Person("foo", 24); PersonCopier copier = new PersonCopier(); CopiedOnHeapValueHolder<Person> valueHolder = new CopiedOnHeapValueHolder<Person>(person, -1, false, copier); person.age = 25; assertNotSame(person, valueHolder.value()); } @Test public void testValueByRef() throws Exception { Person person = new Person("foo", 24); CopiedOnHeapValueHolder<Person> valueHolder = new CopiedOnHeapValueHolder<Person>(person, -1, false, new IdentityCopier<Person>()); person.age = 25; assertSame(person, valueHolder.value()); } private static class Person { String name; int age; Person(Person other) { this.name = other.name; this.age = other.age; } Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(final Object other) { if(this == other) return true; if(other == null || this.getClass() != other.getClass()) return false; Person that = (Person)other; if(name != that.name || age != that.age) return false; return true; } @Override public int hashCode() { int result = 1; result = 31 * result + age; result = 31 * result + name.hashCode(); return result; } } public static class PersonCopier extends ReadWriteCopier<Person> { @Override public Person copy(final Person obj) { return new Person(obj); } } }