public void testDeleteInlineReplyDeletesAnchor() { ConversationBlip blip = target.getRootThread().appendBlip(); XmlStringBuilder xmlBefore = XmlStringBuilder.innerXml(blip.getContent()); ConversationThread inlineReply = blip.addReplyThread(locateAfterLineElement( blip.getContent())); ConversationBlip inlineReplyBlip = inlineReply.appendBlip(); inlineReplyBlip.delete(); assertBlipInvalid(inlineReplyBlip); assertThreadInvalid(inlineReply); assertStructureEquivalent(xmlBefore, blip.getContent()); }
/** * Asserts that the state-querying methods on a blip can be called. */ protected static void assertBlipAccessible(ConversationBlip blip) { blip.getReplyThreads(); blip.getAuthorId(); blip.getContent(); blip.getContributorIds(); blip.getConversation(); blip.getId(); blip.locateReplyThreads(); blip.getLastModifiedTime(); blip.getLastModifiedVersion(); blip.getReplyThreads(); blip.getThread(); blip.hackGetRaw(); blip.isRoot(); }
@Override public Map<String, Long> getBlipVersions(WaveletId id) { Conversation c = view.getConversation(WaveletBasedConversation.idFor(id)); Map<String, Long> blipVersions = new HashMap<String, Long>(); for (ConversationBlip blip : BlipIterators.breadthFirst(c)) { blipVersions.put(blip.getId(), blip.getLastModifiedVersion()); } return blipVersions; }
/** * Finds the parent of a blip. The parent is the preceding blip in the thread, * or the blip to which the thread is a reply for the first blip in a thread. * The first blip of the root thread has no parent. * * @param blip the blip. * @return the blip's parent, or {@code null} if the blip is the first blip * in a conversation. */ @Override public ConversationBlip findBlipParent(ConversationBlip blip) { ConversationThread containingThread = blip.getThread(); if (containingThread.getFirstBlip() == blip && containingThread != blip.getConversation().getRootThread()) { return containingThread.getParentBlip(); } return findPreviousSibling(blip); }
@Override public BlipData toBlipData(ConversationBlip blip, Wavelet wavelet, EventMessageBundle eventMessageBundle) { ConversationBlip parentBlip = findBlipParent(blip); BlipData blipData = new BlipData(); blipData.setCreator(blip.getAuthorId().getAddress()); blipData.setContributors(idsToParticipantIdList(blip.getContributorIds())); blipData.setBlipId(blip.getId()); blipData.setLastModifiedTime(blip.getLastModifiedTime()); blipData.setVersion(blip.getLastModifiedVersion()); blipData.setParentBlipId(parentBlip == null ? null : parentBlip.getId()); blipData.setWaveId(ApiIdSerializer.instance().serialiseWaveId(wavelet.getWaveId())); blipData.setWaveletId(ApiIdSerializer.instance().serialiseWaveletId(wavelet.getId())); blipData.setChildBlipIds(toBlipIdList(findBlipChildren(blip))); ApiView apiView = new ApiView(blip.getContent(), wavelet); // Set content. blipData.setContent(apiView.apiContents()); // Set Annotations. blipData.setAnnotations(extractAnnotations(blip.getContent(), apiView)); // blip.getContent().rangedAnnotations(0, blip.getContent().size(), null), // Set Form Elements. blipData.setElements(ElementSerializer.serialize(blip.getContent(), wavelet)); return blipData; }
private static void assertBlipsEquivalent(ConversationBlip expected, ConversationBlip actual) { assertEquals("Mismatched id in constructed conversation blip", expected.getId(), actual.getId()); assertEquals("Mismatched author in constructed conversation blip", expected.getAuthorId(), actual.getAuthorId()); assertEquals("Mismatched timestamp in constructed conversation blip", expected.getLastModifiedTime(), actual.getLastModifiedTime()); assertEquals("Mismatched contributors in constructed conversation blip", expected.getContributorIds(), actual.getContributorIds()); Iterator<? extends ConversationThread> expectedThreads = expected.getReplyThreads().iterator(); Iterator<? extends ConversationThread> actualThreads = actual.getReplyThreads().iterator(); while (expectedThreads.hasNext()) { assertTrue("Missing thread in reconstructed conversation", actualThreads.hasNext()); ConversationThread expectedThread = expectedThreads.next(); ConversationThread actualThread = actualThreads.next(); assertThreadsEquivalent(expectedThread, actualThread); } assertFalse("Extra thread in reconstructed conversation", actualThreads.hasNext()); } }
public void testDeleteLastBlipInNonRootThreadDeletesThread() { ConversationBlip blip = target.getRootThread().appendBlip(); ConversationThread replyThread = blip.addReplyThread(); ConversationBlip replyBlip = replyThread.appendBlip(); replyBlip.delete(); assertFalse(blip.getReplyThreads().iterator().hasNext()); assertThreadChildrenConsistent(blip); assertThreadInvalid(replyThread); }
public void testDeleteLastBlipInThreadRemovesThread() { ConversationBlip rootBlip = target.getRootThread().appendBlip(); ConversationThread topThread = rootBlip.addReplyThread(); ConversationBlip topBlip = topThread.appendBlip(); ConversationThread firstReply = topBlip.addReplyThread(); firstReply.appendBlip().delete(); assertNull(topBlip.getReplyThread(firstReply.getId())); assertManifestXml("<blip id=\"" + rootBlip.getId() + "\">" + "<thread id=\"" + topThread.getId() + "\">" + "<blip id=\"" + topBlip.getId() + "\"></blip>" + "</thread>" + "</blip>"); }
public void testDeleteEmptyThread() { ConversationBlip blip = target.getRootThread().appendBlip(); ConversationThread replyThread = blip.addReplyThread(); replyThread.delete(); assertFalse(blip.getReplyThreads().iterator().hasNext()); assertThreadChildrenConsistent(blip); assertThreadInvalid(replyThread); }
public void testAppendBlipAppendsBlipsToThread() { ConversationThread thread = target.getRootThread(); ConversationBlip b1 = thread.appendBlip(); ConversationBlip b2 = thread.appendBlip(); ConversationBlip b3 = thread.appendBlip(); assertSame(b1, thread.getFirstBlip()); assertSame(target, b1.getConversation()); assertSame(thread, b1.getThread()); assertSame(b1, target.getBlip(b1.getId())); assertEquals(Arrays.asList(b1, b2, b3), getBlipList(thread)); }
public void testAppendInlineReplyCreatesInlineThread() { ConversationBlip blip = target.getRootThread().appendBlip(); MutableDocument<?, ?, ?> doc = blip.getContent(); int location = locateAfterLineElement(doc); ConversationThread thread = blip.addReplyThread(location); assertSame(blip, thread.getParentBlip()); assertEquals(Collections.singletonList(LocatedReplyThread.of(thread, location)), blip.locateReplyThreads()); assertThreadChildrenConsistent(blip); }
/** * Tests that methods which access the state of a thread without changing it * are correct after thread deletion. */ public void testThreadCanBeAccessedAfterDeletion() { ConversationBlip blip = target.getRootThread().appendBlip(); ConversationThread thread = blip.addReplyThread(); ConversationBlip replyBlip = thread.appendBlip(); thread.delete(); assertBlipInvalid(replyBlip); assertBlipAccessible(replyBlip); assertThreadInvalid(thread); assertThreadAccessible(thread); assertEquals(blip, thread.getParentBlip()); assertFalse(blip.getReplyThreads().iterator().hasNext()); assertEquals(thread, replyBlip.getThread()); assertEquals(Collections.emptyList(), getBlipList(thread)); }
void populate(ConversationBlip blip, FakeBlipView blipUi) { for (ThreadBuilder threadBuilder : unanchored) { ConversationThread thread = blip.addReplyThread(); threadBuilder.populate(thread, blipUi.insertDefaultAnchorBefore(null, thread).getThread()); } for (ThreadBuilder threadBuilder : anchored) { ConversationThread thread = blip.addReplyThread(blip.getContent().size() - 1); FakeAnchor anchor = blipUi.insertDefaultAnchorBefore(null, thread); FakeInlineThreadView threadUi = anchor.getThread(); threadBuilder.populate(thread, threadUi); anchor.detach(threadUi); blipUi.getMeta().createInlineAnchorBefore(null, thread).attach(threadUi); } for (ConversationBuilder conversationBuilder : privates) { Conversation conversation = wave.createConversation(); conversation.setAnchor(blip.getConversation().createAnchor(blip)); assert conversation.hasAnchor(); conversationBuilder.populate( conversation, blipUi.insertConversationBefore(null, conversation)); } }
@Override public void putBlip(String blipId, ConversationBlip newBlip) { if (blipId.startsWith(TEMP_ID_MARKER)) { tempBlipIdMap.put(blipId, newBlip.getId()); } }
public void testFindBlipPreviousSibling() { Conversation conversation = makeConversation(); ConversationBlip first = conversation.getRootThread().getFirstBlip(); ConversationBlip second = conversation.getRootThread().appendBlip(); ConversationBlip reply = first.addReplyThread().appendBlip(); ConversationBlip secondReply = reply.getThread().appendBlip(); assertNull(EventDataConverterV21.findPreviousSibling(first)); assertSame(first, EventDataConverterV21.findPreviousSibling(second)); assertNull(EventDataConverterV21.findPreviousSibling(reply)); assertSame(reply, EventDataConverterV21.findPreviousSibling(secondReply)); }
/** * Returns the position of the body element of the given blip. */ public static int getBodyPosition(ConversationBlip blip) { return getBodyPosition(blip.getContent()); }
public void testFindBlipChildren() { ConversationBlip first = conversation.getRootThread().getFirstBlip(); ConversationBlip second = conversation.getRootThread().appendBlip(); ConversationBlip reply = first.addReplyThread().appendBlip(); ConversationBlip secondReply = reply.getThread().appendBlip(); ConversationBlip inlineReply = first.addReplyThread(3).appendBlip(); EventDataConverterV22 converter = new EventDataConverterV22(); assertEquals(0, converter.findBlipChildren(second).size()); List<ConversationBlip> children = converter.findBlipChildren(first); assertEquals(3, children.size()); assertEquals(inlineReply.getId(), children.get(0).getId()); assertEquals(reply.getId(), children.get(1).getId()); assertEquals(secondReply.getId(), children.get(2).getId()); }
public void testLiveRenderingCommutesOnBlipDelete() { ConversationThread root = wave.getRoot().getRootThread(); root.getFirstBlip().delete(); assertEquals(render().toString(), rendering.toString()); }
private static void sampleReply(ConversationBlip blip) { write(blip); ConversationThread thread = blip.addReplyThread(8); write(thread.appendBlip()); }
public void testCanAppendAfterDeletingRootThreadReplies() { ConversationBlip first = target.getRootThread().appendBlip(); ConversationBlip second = target.getRootThread().appendBlip(); ConversationThread reply = first.addReplyThread(); reply.appendBlip(); second.delete(); first.delete(); ConversationBlip newFirst = target.getRootThread().appendBlip(); assertBlipValid(newFirst); }