/**
* 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));
}
}