/** * Copyright 2009 Google 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.waveprotocol.wave.client.editor.content; import org.waveprotocol.wave.client.editor.content.AnnotationPainter.BoundaryFunction; import org.waveprotocol.wave.client.editor.content.AnnotationPainter.PaintFunction; import junit.framework.TestCase; import org.waveprotocol.wave.model.document.util.LocalDocument; import org.waveprotocol.wave.model.util.CollectionUtils; import java.util.Map; /** * @author danilatos@google.com (Daniel Danilatos) */ public class PainterRegistryTest extends TestCase { private final PaintFunction p1 = new PaintFunction() { @Override public Map<String, String> apply(Map<String, Object> from, boolean isEditing) { throw new AssertionError("Not implemented"); } }; private final PaintFunction p2 = new PaintFunction() { @Override public Map<String, String> apply(Map<String, Object> from, boolean isEditing) { throw new AssertionError("Not implemented"); } }; private final PaintFunction p3 = new PaintFunction() { @Override public Map<String, String> apply(Map<String, Object> from, boolean isEditing) { throw new AssertionError("Not implemented"); } }; private final PaintFunction p4 = new PaintFunction() { @Override public Map<String, String> apply(Map<String, Object> from, boolean isEditing) { throw new AssertionError("Not implemented"); } }; private final BoundaryFunction b1 = new BoundaryFunction() { @Override public <N, E extends N, T extends N> E apply(LocalDocument<N, E, T> localDoc, E parent, N nodeAfter, Map<String, Object> before, Map<String, Object> after, boolean isEditing) { throw new AssertionError("Not implemented"); } }; /** * Miscellaneous tests that depend on the previous state for convenience */ public void testMiscellaneous() { PainterRegistryImpl r = new PainterRegistryImpl("a", "b", new AnnotationPainter(null)); assertTrue(r.getPaintFunctions().isEmpty()); // Test we get back the function we registered r.registerPaintFunction(CollectionUtils.newStringSet("a"), p1); assertSame(p1, r.getPaintFunctions().iterator().next()); PainterRegistryImpl r2 = (PainterRegistryImpl) r.createExtension(); // Test the extension contains the function assertSame(p1, r2.getPaintFunctions().iterator().next()); assertEquals(r.debugGetVersion(), r2.debugGetKnownParentVersion()); // Test propagation occurs r.registerPaintFunction(CollectionUtils.newStringSet("b"), p2); assertFalse(r.debugGetVersion() == r2.debugGetKnownParentVersion()); assertTrue(r2.getPaintFunctions().contains(p2)); assertEquals(r.debugGetVersion(), r2.debugGetKnownParentVersion()); PainterRegistryImpl r3 = (PainterRegistryImpl) r2.createExtension(); // ensure cache is filled r3.getPaintFunctions(); // Test propagation occurs two levels deep after caching r.registerPaintFunction(CollectionUtils.newStringSet("c"), p3); assertFalse(r.debugGetVersion() == r2.debugGetKnownParentVersion()); assertTrue(r2.getPaintFunctions().contains(p3)); assertEquals(r.debugGetVersion(), r2.debugGetKnownParentVersion()); assertFalse(r2.debugGetVersion() == r3.debugGetKnownParentVersion()); assertTrue(r3.getPaintFunctions().contains(p3)); assertEquals(r2.debugGetVersion(), r3.debugGetKnownParentVersion()); } public void testPropagatesDeeply() { PainterRegistryImpl r1 = new PainterRegistryImpl("a", "b", new AnnotationPainter(null)); PainterRegistryImpl r2 = (PainterRegistryImpl) r1.createExtension(); PainterRegistryImpl r3 = (PainterRegistryImpl) r2.createExtension(); r1.registerBoundaryFunction(CollectionUtils.newStringSet("a"), b1); assertTrue(r3.getBoundaryFunctions().contains(b1)); r1.registerPaintFunction(CollectionUtils.newStringSet("b"), p1); assertTrue(r3.getPaintFunctions().contains(p1)); } public void testInitialState() { PainterRegistryImpl r = new PainterRegistryImpl("a", "b", new AnnotationPainter(null)); PainterRegistryImpl r2 = (PainterRegistryImpl) r.createExtension(); r2.registerPaintFunction(CollectionUtils.newStringSet("b"), p2); assertTrue(r2.getPaintFunctions().contains(p2)); assertTrue(r2.getKeys().contains("b")); r2.registerPaintFunction(CollectionUtils.newStringSet("d"), p4); assertTrue(r2.getPaintFunctions().contains(p4)); assertTrue(r2.getKeys().contains("d")); r2.registerBoundaryFunction(CollectionUtils.newStringSet("e"), b1); assertTrue(r2.getBoundaryFunctions().contains(b1)); assertTrue(r2.getKeys().contains("e")); } }