/** * Copyright (C) 2015 Valkyrie RCP * * 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.valkyriercp.binding.form.support; import org.junit.Test; import org.valkyriercp.AbstractValkyrieTest; import org.valkyriercp.binding.form.FieldMetadata; import org.valkyriercp.binding.value.support.ValueHolder; import org.valkyriercp.test.TestPropertyChangeListener; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.*; public class DefaultFieldMetadataTests extends AbstractValkyrieTest { @Test public void testDirtyChangeTrackingOnValueChange() { FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1")); DefaultFormModel fm = new DefaultFormModel(new Object()); DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null); TestPropertyChangeListener pcl = new TestPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY); m.addPropertyChangeListener(FieldMetadata.DIRTY_PROPERTY, pcl); assertTrue(!m.isDirty()); assertEquals(0, pcl.eventCount()); vm.setValue("v1"); assertEquals(0, pcl.eventCount()); assertTrue(!m.isDirty()); vm.setValue("v2"); assertEquals(1, pcl.eventCount()); assertTrue(m.isDirty()); vm.setValue("v3"); assertEquals(1, pcl.eventCount()); assertTrue(m.isDirty()); vm.setValue("v1"); assertEquals(2, pcl.eventCount()); assertTrue(!m.isDirty()); vm.setValue(null); assertEquals(3, pcl.eventCount()); assertTrue(m.isDirty()); vm.clearDirty(); assertEquals(4, pcl.eventCount()); assertTrue(!m.isDirty()); vm.setValue(null); assertEquals(4, pcl.eventCount()); assertTrue(!m.isDirty()); } @Test public void testEnabledChange() { FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1")); DefaultFormModel fm = new DefaultFormModel(new Object()); DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null); TestPropertyChangeListener pcl = new TestPropertyChangeListener(FieldMetadata.ENABLED_PROPERTY); m.addPropertyChangeListener(FieldMetadata.ENABLED_PROPERTY, pcl); assertEquals(0, pcl.eventCount()); assertTrue(m.isEnabled()); m.setEnabled(true); assertEquals(0, pcl.eventCount()); assertTrue(m.isEnabled()); m.setEnabled(false); assertEquals(1, pcl.eventCount()); assertTrue(!m.isEnabled()); fm.setEnabled(false); assertEquals(1, pcl.eventCount()); assertTrue(!m.isEnabled()); m.setEnabled(true); assertEquals(1, pcl.eventCount()); assertTrue(!m.isEnabled()); fm.setEnabled(true); assertEquals(2, pcl.eventCount()); assertTrue(m.isEnabled()); } @Test public void testCustomMetaData() { final FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1")); final DefaultFormModel fm = new DefaultFormModel(new Object()); final Map customMeta = new HashMap(); customMeta.put("custom1", "a"); customMeta.put("custom2", "b"); final DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, customMeta); assertNull(m.getUserMetadata("custom3")); assertEquals("a", m.getUserMetadata("custom1")); assertEquals("b", m.getUserMetadata("custom2")); } @Test public void testMutableCustomMetaData() { final FormModelMediatingValueModel vm = new FormModelMediatingValueModel(new ValueHolder("v1")); final DefaultFormModel fm = new DefaultFormModel(new Object()); final DefaultFieldMetadata m = new DefaultFieldMetadata(fm, vm, Object.class, false, null); final String name = "customProperty"; final String othername = "othername"; final TestPropertyChangeListener pcl = new TestPropertyChangeListener(name); final TestPropertyChangeListener pclOther = new TestPropertyChangeListener(othername); m.addPropertyChangeListener(name, pcl); m.addPropertyChangeListener(othername, pclOther); assertNull(m.getUserMetadata(name)); pcl.assertEventCount(0); m.setUserMetadata(name, "a"); assertEquals("a", m.getUserMetadata(name)); pcl.assertEventCount(1); assertNull(pcl.lastEvent().getOldValue()); assertEquals("a", pcl.lastEvent().getNewValue()); m.setUserMetadata(name, "b"); assertEquals("b", m.getUserMetadata(name)); pcl.assertEventCount(2); assertEquals("a", pcl.lastEvent().getOldValue()); assertEquals("b", pcl.lastEvent().getNewValue()); m.setUserMetadata(name, "b"); pcl.assertEventCount(2); m.setUserMetadata(name, null); assertNull(m.getUserMetadata(name)); pcl.assertEventCount(3); assertEquals("b", pcl.lastEvent().getOldValue()); assertNull(pcl.lastEvent().getNewValue()); pclOther.assertEventCount(0); m.setUserMetadata(othername, "1"); pcl.assertEventCount(3); pclOther.assertEventCount(1); m.clearUserMetadata(); assertNull(m.getUserMetadata(name)); assertNull(m.getUserMetadata(othername)); pcl.assertEventCount(3); pclOther.assertEventCount(2); assertEquals("1", pclOther.lastEvent().getOldValue()); assertEquals(null, pclOther.lastEvent().getNewValue()); } }