/** * Copyright 2010 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.integration; import com.google.gwt.junit.client.GWTTestCase; import org.waveprotocol.wave.client.editor.Editor; import org.waveprotocol.wave.client.editor.EditorImpl; import org.waveprotocol.wave.client.editor.EditorSettings; import org.waveprotocol.wave.client.editor.EditorStaticDeps; import org.waveprotocol.wave.client.editor.EditorTestingUtil; import org.waveprotocol.wave.client.editor.Editors; import org.waveprotocol.wave.client.editor.content.AnnotationPainter; import org.waveprotocol.wave.client.editor.content.CMutableDocument; import org.waveprotocol.wave.client.editor.content.ContentView; import org.waveprotocol.wave.client.editor.content.PainterRegistryImpl; import org.waveprotocol.wave.client.editor.content.Registries; import org.waveprotocol.wave.client.editor.content.RegistriesImpl; import org.waveprotocol.wave.client.editor.content.misc.AnnotationPaint; import org.waveprotocol.wave.client.editor.content.misc.StyleAnnotationHandler; import org.waveprotocol.wave.client.editor.keys.KeyBindingRegistry; import org.waveprotocol.wave.client.editor.testing.ContentSerialisationUtil; import org.waveprotocol.wave.client.scheduler.testing.FakeTimerService; import org.waveprotocol.wave.client.widget.popup.PopupChrome; import org.waveprotocol.wave.client.widget.popup.PopupChromeProvider; import org.waveprotocol.wave.client.widget.popup.simple.Popup; import org.waveprotocol.wave.model.document.util.DocHelper; /** * * @author danilatos@google.com (Daniel Danilatos) */ public class CleanupGwtTest extends GWTTestCase { @Override public String getModuleName() { return "org.waveprotocol.wave.client.editor.integration.Tests"; } public void testAnnotationPainterDies() { EditorStaticDeps.setPopupProvider(Popup.LIGHTWEIGHT_POPUP_PROVIDER); EditorStaticDeps.setPopupChromeProvider(new PopupChromeProvider() { public PopupChrome createPopupChrome() { return null; } }); EditorTestingUtil.setupTestEnvironment(); FakeTimerService timerService = new FakeTimerService(); PainterRegistryImpl paintRegistry = new PainterRegistryImpl( AnnotationPaint.SPREAD_FULL_TAGNAME, AnnotationPaint.BOUNDARY_FULL_TAGNAME, new AnnotationPainter(timerService)); Registries registries = new RegistriesImpl(Editor.ROOT_HANDLER_REGISTRY, Editor.ROOT_ANNOTATION_REGISTRY, paintRegistry); StyleAnnotationHandler.register(registries); Editor editor = Editors.create(); editor.init(registries, KeyBindingRegistry.NONE, EditorSettings.DEFAULT); // Now the actual test ContentSerialisationUtil.setContentString(editor, "<body><line/>abc</body>"); CMutableDocument doc = editor.getDocument(); doc.setAnnotation(3, 4, "style/color", "red"); editor.getContent().debugCheckHealthy2(); timerService.tick(1000); ContentView fullDoc = ((EditorImpl) editor).getContent().getFullContentView(); assertNotNull( DocHelper.getElementWithTagName(fullDoc, AnnotationPaint.SPREAD_FULL_TAGNAME)); doc.setAnnotation(3, 4, "style/color", null); timerService.tick(1000); assertNull(DocHelper.getElementWithTagName(fullDoc, AnnotationPaint.SPREAD_FULL_TAGNAME)); doc.setAnnotation(3, 5, "style/color", "red"); editor.removeContentAndUnrender(); editor.reset(); timerService.tick(1000); assertNull(DocHelper.getElementWithTagName(fullDoc, AnnotationPaint.SPREAD_FULL_TAGNAME)); } }