/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.model.conversation.testing;
import org.waveprotocol.wave.model.conversation.Blips;
import org.waveprotocol.wave.model.conversation.ConversationBlip;
import org.waveprotocol.wave.model.conversation.TitleHelper;
import org.waveprotocol.wave.model.document.ReadableWDocument;
import org.waveprotocol.wave.model.document.indexed.IndexedDocument;
import org.waveprotocol.wave.model.document.operation.automaton.DocumentSchema;
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;
import org.waveprotocol.wave.model.document.util.DocHelper;
import org.waveprotocol.wave.model.document.util.DocProviders;
import org.waveprotocol.wave.model.document.util.LineContainers;
import org.waveprotocol.wave.model.document.util.XmlStringBuilder;
/**
* Utility functions used by conversation tests.
*
*/
public final class BlipTestUtils {
// Non-instantiatable class
private BlipTestUtils() {
}
/**
* Returns the position of the body element in an initial, empty, blip.
*/
public static int getInitialBlipBodyPosition() {
IndexedDocument<Node, Element, Text> d = DocProviders.POJO.build(
TitleHelper.emptyDocumentWithTitle(),
DocumentSchema.NO_SCHEMA_CONSTRAINTS);
return getBodyPosition(d);
}
/**
* Returns the position of the body element of the given blip.
*/
public static int getBodyPosition(ConversationBlip blip) {
return getBodyPosition(blip.getContent());
}
/**
* Returns the position of the body element of the given document or 0 if the
* document has no body.
*/
public static <N, E extends N> int getBodyPosition(ReadableWDocument<N, E, ?> doc) {
N body = DocHelper.getElementWithTagName(doc, Blips.BODY_TAGNAME);
if (body == null) return 0;
return doc.getLocation(body);
}
/**
* Wrap the given xml string containing a blip body in an XmlStringBuilder
* and prepend an empty head.
*/
public static XmlStringBuilder prependHead(String body) {
return XmlStringBuilder.createEmpty()
.append(Blips.INITIAL_HEAD)
.append(XmlStringBuilder.createFromXmlString(body));
}
/**
* Returns a blip whose contents are the given lines.
*/
public static String debugBlipWrap(String ... lines) {
return XmlStringBuilder.createEmpty()
.append(Blips.INITIAL_HEAD)
.append(XmlStringBuilder.createFromXmlString(LineContainers.debugContainerWrap(lines)))
.toString();
}
}