/**
* 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.util;
import org.waveprotocol.wave.model.document.util.DocProviders;
import junit.framework.TestCase;
import org.waveprotocol.wave.model.document.indexed.IndexedDocument;
import org.waveprotocol.wave.model.document.raw.impl.Element;
import org.waveprotocol.wave.model.document.raw.impl.Node;
import org.waveprotocol.wave.model.document.raw.impl.Text;
/**
* Tests numerous cases for the padding calculations.
*
* @author patcoleman@google.com (Pat Coleman)
*/
public class PaddingBundleTest extends TestCase {
private static IndexedDocument<Node, Element, Text> createContent(String doc) {
return DocProviders.POJO.parse("<body><line></line>" + doc + "</body>");
}
public static void CHECK(PaddingBundle bundle, String text, boolean start, boolean end) {
assertEquals(bundle.getText(), text);
assertEquals(bundle.isAddedStart(), start);
assertEquals(bundle.isAddedEnd(), end);
}
/** Make sure correct padding is calculated for insertion into an empty document. */
public void testEmptyDocumentInsertion() {
IndexedDocument<Node, Element, Text> document = createContent("");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "word", 3, 3);
CHECK(bundle, "word ", false, true);
}
/** Make sure correct padding is calculated for insertion over text in a document. */
public void testReplaceTextInsertion() {
IndexedDocument<Node, Element, Text> document = createContent("stuff");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "word", 3, 8);
CHECK(bundle, "word ", false, true);
}
/** Make sure correct padding is calculated for insertion in the middle of a word. */
public void testInsertionWithinWord() {
IndexedDocument<Node, Element, Text> document = createContent("stuff");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "word", 5, 6);
CHECK(bundle, " word ", true, true);
}
/** Make sure correct padding is calculated for already-padded insertion inside a word. */
public void testPaddedInsertionWithinWord() {
IndexedDocument<Node, Element, Text> document = createContent("stuff");
PaddingBundle bundle = PaddingBundle.applyPadding(document, " word ", 5, 6);
CHECK(bundle, " word ", false, false);
}
/** Make sure correct padding is calculated for insertion across inline tags. */
public void testInsertionWithinWordAcrossTags() {
IndexedDocument<Node, Element, Text> document = createContent("stuf<b>f</b>");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "word", 7, 7);
CHECK(bundle, " word ", true, true);
}
/** Make sure correct padding is calculated for insertion at the start of a paragraph. */
public void testInsertionAtStart() {
IndexedDocument<Node, Element, Text> document = createContent("stuff");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "word", 3, 3);
CHECK(bundle, "word ", false, true);
}
/** Make sure correct padding is calculated for insertion at the end of a paragraph. */
public void testInsertionAtEnd() {
IndexedDocument<Node, Element, Text> document = createContent("stuff");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "word", 8, 8);
CHECK(bundle, " word ", true, true);
}
/** Make sure correct padding is calculated for insertion just before a word. */
public void testInsertionBeforeWord() {
IndexedDocument<Node, Element, Text> document = createContent("seize the day");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "carpediem", 9, 9);
CHECK(bundle, "carpediem ", false, true);
}
/** Make sure correct padding is calculated for insertion just after a word. */
public void testInsertionAfterWord() {
IndexedDocument<Node, Element, Text> document = createContent("seize the day");
PaddingBundle bundle = PaddingBundle.applyPadding(document, "carpediem", 12, 12);
CHECK(bundle, " carpediem", true, false);
}
}