@Override public void insertText(Point<N> point, String text) { getDelegate().insertText(point, text); }
@Override public void insertText(int location, String text) { getDelegate().insertText(location, text); }
/** * Try to insert text into a new text node, by first inserting an element, and * then removing it after the new text is inserted. * * NOTE(user): We assume the document doesn't try to join the text nodes * after the dummy element is removed. * * @param <N> * @param at * @param text */ // TODO(user): Move somewhere common for TextLocatorTest static <N, E extends N, T extends N> void insertTextInNewTextNodeHelper( MutableDocument<N, E, T> doc, Point<N> at, String text) { E e = doc.createElement(at, "a", Collections.<String, String> emptyMap()); doc.insertText(Point.after(doc, e), text); doc.deleteNode(e); }
/** * Try to insert text into a new text node, by first inserting an element, and * then removing it after the new text is inserted. * * NOTE(user): We assume the document doesn't try to join the text nodes * after the dummy element is removed. * * @param <N> * @param at * @param text */ // TODO(user): Move somewhere common for TextLocatorTest static <N, E extends N, T extends N> void insertTextInNewTextNodeHelper( MutableDocument<N, E, T> doc, Point<N> at, String text) { E e = doc.createElement(at, "a", Collections.<String, String> emptyMap()); doc.insertText(Point.after(doc, e), text); doc.deleteNode(e); }
public <N, E extends N, T extends N> void exec(MutableDocument<N, E, T> doc) { Point<N> startText = doc.locate(locateAfterLineElement(doc)); doc.insertText(startText, "cd"); // Insert reply between c|d. N bodyNode = DocHelper.getElementWithTagName(doc, Blips.BODY_TAGNAME); N textNode = doc.getFirstChild(bodyNode); textNode = doc.getNextSibling(textNode); int replyLocation = doc.getLocation(Point.inText(textNode, 1)); blip.addReplyThread(replyLocation); // Insert text to give abc|d startText = Point.before(doc, textNode); doc.insertText(startText, "ab"); int newLocation = blip.locateReplyThreads().iterator().next().getLocation(); assertEquals(replyLocation + 2, newLocation); } });
public <N, E extends N, T extends N> void exec(MutableDocument<N, E, T> doc) { Point<N> startText = doc.locate(locateAfterLineElement(doc)); doc.insertText(startText, "cd"); // Insert reply between c|d. N bodyNode = DocHelper.getElementWithTagName(doc, Blips.BODY_TAGNAME); N textNode = doc.getFirstChild(bodyNode); textNode = doc.getNextSibling(textNode); int replyLocation = doc.getLocation(Point.inText(textNode, 1)); blip.addReplyThread(replyLocation); // Insert text to give abc|d startText = Point.before(doc, textNode); doc.insertText(startText, "ab"); int newLocation = blip.locateReplyThreads().iterator().next().getLocation(); assertEquals(replyLocation + 2, newLocation); } });
public <N, E extends N, T extends N> void exec(MutableDocument<N, E, T> doc) { Point<N> startText = doc.locate(locateAfterLineElement(doc)); doc.insertText(startText, "cd"); // Insert reply between c|d. N bodyNode = DocHelper.getElementWithTagName(doc, Blips.BODY_TAGNAME); N textNode = doc.getFirstChild(bodyNode); textNode = doc.getNextSibling(textNode); int replyLocation = doc.getLocation(Point.inText(textNode, 1)); ConversationThread replyThread = blip.addReplyThread(replyLocation); // Delete text and anchor. doc.deleteRange(Point.before(doc, textNode), Point.inElement(bodyNode, null)); int newLocation = blip.locateReplyThreads().iterator().next().getLocation(); assertEquals(Blips.INVALID_INLINE_LOCATION, newLocation); } });
public <N, E extends N, T extends N> void exec(MutableDocument<N, E, T> doc) { Point<N> startText = doc.locate(locateAfterLineElement(doc)); doc.insertText(startText, "cd"); // Insert reply between c|d. N bodyNode = DocHelper.getElementWithTagName(doc, Blips.BODY_TAGNAME); N textNode = doc.getFirstChild(bodyNode); textNode = doc.getNextSibling(textNode); int replyLocation = doc.getLocation(Point.inText(textNode, 1)); ConversationThread replyThread = blip.addReplyThread(replyLocation); // Delete text and anchor. doc.deleteRange(Point.before(doc, textNode), Point.inElement(bodyNode, null)); int newLocation = blip.locateReplyThreads().iterator().next().getLocation(); assertEquals(Blips.INVALID_INLINE_LOCATION, newLocation); } });
/** Check that a collapsed range in the middle behaves correctly. */ public void testCollapsedRange() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); // collapsed at the start, through mutation: tracker.trackRange(new Range(2, 2)); assertEquals(new Range(2, 2), tracker.getRange()); doc.insertText(doc.locate(0), "a"); assertEquals(new Range(3, 3), tracker.getRange()); doc.insertText(doc.locate(4), "b"); assertEquals(new Range(3, 3), tracker.getRange()); doc.insertText(doc.locate(3), "c"); assertEquals(new Range(4, 4), tracker.getRange()); }
/** Check that a collapsed range in the middle behaves correctly. */ public void testCollapsedRange() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); // collapsed at the start, through mutation: tracker.trackRange(new Range(2, 2)); assertEquals(new Range(2, 2), tracker.getRange()); doc.insertText(doc.locate(0), "a"); assertEquals(new Range(3, 3), tracker.getRange()); doc.insertText(doc.locate(4), "b"); assertEquals(new Range(3, 3), tracker.getRange()); doc.insertText(doc.locate(3), "c"); assertEquals(new Range(4, 4), tracker.getRange()); }
/** Check that a collapsed range over the document behaves correctly. */ public void testEntireCoverRanges() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); // entire range through mutation at middle, end, start tracker.trackRange(new Range(0, doc.size())); assertEquals(new Range(0, doc.size()), tracker.getRange()); doc.insertText(doc.locate(1), "a"); assertEquals(new Range(0, doc.size()), tracker.getRange()); doc.insertText(doc.locate(doc.size()), "b"); assertEquals(new Range(0, doc.size()), tracker.getRange()); doc.insertText(doc.locate(0), "c"); assertEquals(new Range(1, doc.size()), tracker.getRange()); }
/** Check that a collapsed range at 0 behaves correctly. */ public void testCollapsedStartRange() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); // collapsed at the start, through mutation: tracker.trackRange(new Range(0, 0)); assertEquals(new Range(0, 0), tracker.getRange()); doc.insertText(doc.locate(3), "a"); assertEquals(new Range(0, 0), tracker.getRange()); doc.insertText(doc.locate(0), "x"); assertEquals(new Range(1, 1), tracker.getRange()); }
/** Check that a collapsed range at 0 behaves correctly. */ public void testCollapsedStartRange() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); // collapsed at the start, through mutation: tracker.trackRange(new Range(0, 0)); assertEquals(new Range(0, 0), tracker.getRange()); doc.insertText(doc.locate(3), "a"); assertEquals(new Range(0, 0), tracker.getRange()); doc.insertText(doc.locate(0), "x"); assertEquals(new Range(1, 1), tracker.getRange()); }
/** Check that a collapsed range at doc.size() behaves correctly. */ public void testCollapsedEndRange() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); int end = doc.size(); // collapsed at the start, through mutation: tracker.trackRange(new Range(end, end)); assertEquals(new Range(end, end), tracker.getRange()); doc.insertText(doc.locate(3), "a"); assertEquals(new Range(end + 1, end + 1), tracker.getRange()); doc.insertText(doc.locate(doc.size()), "x"); assertEquals(new Range(end + 2, end + 2), tracker.getRange()); }
/** Check that a collapsed range over the document behaves correctly. */ public void testEntireCoverRanges() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); // entire range through mutation at middle, end, start tracker.trackRange(new Range(0, doc.size())); assertEquals(new Range(0, doc.size()), tracker.getRange()); doc.insertText(doc.locate(1), "a"); assertEquals(new Range(0, doc.size()), tracker.getRange()); doc.insertText(doc.locate(doc.size()), "b"); assertEquals(new Range(0, doc.size()), tracker.getRange()); doc.insertText(doc.locate(0), "c"); assertEquals(new Range(1, doc.size()), tracker.getRange()); }
/** * Test normalize points between an element and a text node <a>stuff</a>"hi" */ public void testNormalizePointElementFollowedByTextNode() { MutableDocument<Node, Element, Text> doc = initializeMutableDoc(); Element p = doc.asElement(doc.getFirstChild(doc.getDocumentElement())); assert p != null; Element aElement = doc.createElement(Point.start(doc, p), "a", Collections.<String, String> emptyMap()); doc.insertText(Point.start(doc, aElement), "stuff"); doc.insertText(Point.<Node> end(p), "hi"); Text hi = doc.asText(doc.getLastChild(p)); Text stuff = doc.asText(aElement.getFirstChild()); assertEquals(Point.inText(hi, 0), DocHelper.normalizePoint(Point.<Node> inText(hi, 0), doc)); assertEquals(Point.inText(hi, 0), DocHelper.normalizePoint(Point.<Node>inElement(p, hi), doc)); // In the future, we might want to move the caret out from inline elements. assertEquals(Point.inText(stuff, stuff.getLength()), DocHelper.normalizePoint(Point .<Node> inText(stuff, stuff.getLength()), doc)); }
/** Check that a collapsed range at doc.size() behaves correctly. */ public void testCollapsedEndRange() { String initialContent = "abc"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker tracker = new RangeTracker(test.localAnnotations()); int end = doc.size(); // collapsed at the start, through mutation: tracker.trackRange(new Range(end, end)); assertEquals(new Range(end, end), tracker.getRange()); doc.insertText(doc.locate(3), "a"); assertEquals(new Range(end + 1, end + 1), tracker.getRange()); doc.insertText(doc.locate(doc.size()), "x"); assertEquals(new Range(end + 2, end + 2), tracker.getRange()); }
public void testNodeAtEnd() { TestDocumentContext<Node, Element, Text> cxt = createAnnotationContext(); MutableDocument<Node, Element, Text> doc = cxt.document(); Element e = doc.createChildElement(doc.getDocumentElement(), "p", Attributes.EMPTY_MAP); doc.insertText(Point.<Node>inElement(e, null), "Hi"); doc.setAnnotation(3, 4, "x", "1"); timerService.tick(100); ReadableDocument<Node, Element, Text> fullDoc = cxt.getFullRawDoc(); Element boundary = fullDoc.asElement(fullDoc.getLastChild(e)); assertNotNull(boundary); assertEquals("l:b", boundary.getTagName()); doc.setAnnotation(3, 4, "x", null); timerService.tick(100); boundary = fullDoc.asElement(fullDoc.getLastChild(e)); assertNull(boundary); }
public void testNodeAtEnd() { TestDocumentContext<Node, Element, Text> cxt = createAnnotationContext(); MutableDocument<Node, Element, Text> doc = cxt.document(); Element e = doc.createChildElement(doc.getDocumentElement(), "p", Attributes.EMPTY_MAP); doc.insertText(Point.<Node>inElement(e, null), "Hi"); doc.setAnnotation(3, 4, "x", "1"); timerService.tick(100); ReadableDocument<Node, Element, Text> fullDoc = cxt.getFullRawDoc(); Element boundary = fullDoc.asElement(fullDoc.getLastChild(e)); assertNotNull(boundary); assertEquals("l:b", boundary.getTagName()); doc.setAnnotation(3, 4, "x", null); timerService.tick(100); boundary = fullDoc.asElement(fullDoc.getLastChild(e)); assertNull(boundary); }
public void testRangesWithSameDebugIdDontCollide() { String initialContent = "hello world"; TestDocumentContext<Node, Element, Text> test = ContextProviders.createTestPojoContext( DocProviders.POJO.parse(initialContent).asOperation(), null, null, null, DocumentSchema.NO_SCHEMA_CONSTRAINTS); MutableDocument<Node, Element, Text> doc = test.document(); RangeTracker trackerA = new RangeTracker(test.localAnnotations(), "debugId"); RangeTracker trackerB = new RangeTracker(test.localAnnotations(), "debugId"); trackerA.trackRange(new Range(1, 2)); trackerB.trackRange(new Range(0, 4)); assertEquals(new Range(1, 2), trackerA.getRange()); assertEquals(new Range(0, 4), trackerB.getRange()); doc.insertText(doc.locate(3), "a"); assertEquals(new Range(1, 2), trackerA.getRange()); assertEquals(new Range(0, 5), trackerB.getRange()); trackerA.clearRange(); assertEquals(null, trackerA.getRange()); assertEquals(new Range(0, 5), trackerB.getRange()); }