UNPKG

node-webodf

Version:

WebODF - JavaScript Document Engine http://webodf.org/

1,111 lines (1,096 loc) 315 kB
<!-- * Copyright (C) 2013 KO GmbH <copyright@kogmbh.com> * * @licstart * This file is part of WebODF. * * WebODF is free software: you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License (GNU AGPL) * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * WebODF is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with WebODF. If not, see <http://www.gnu.org/licenses/>. * @licend * * @source: http://www.webodf.org/ * @source: https://github.com/kogmbh/WebODF/ --> <tests xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:c="urn:webodf:names:cursor" xmlns:e="urn:webodf:names:editinfo" xmlns:ws="urn:webodf:names:scope" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"> <test name="AddCursor_00"> <before><office:text><text:p>ab</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/><c:cursor c:memberId="Bob"/>ab</text:p></office:text></after> </test> <test name="AddCursorRemoveCursor"> <before><office:text><text:p>ab</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="RemoveCursor" memberid="Alice"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveCursor" memberid="Bob"/> </opsB> <after><office:text><text:p>ab</text:p></office:text></after> </test> <test name="ApplyDirectStylingInsertText_[V__]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="1" text="V" moveCursor="true"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>AV<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingInsertText_V_[__]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="0" text="V" moveCursor="true"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>VA<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingInsertText_[_V_]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="2" text="V" moveCursor="true"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BVC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingInsertText_[__V]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="3" text="V" moveCursor="true"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BCV</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingInsertText_[__]_V"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="4" text="V" moveCursor="true"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span>DV</text:p></office:text> </after> </test> <test name="ApplyDirectStylingMergeParagraph_MergeBeforeStylingStart"> <before> <office:automatic-styles/> <office:text><text:p/><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="2" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="1"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingMergeParagraph_MergeOnStylingStart"> <before> <office:automatic-styles/> <office:text><text:p>A</text:p><text:p>BCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="2" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="2"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingMergeParagraph_MergeWithinStyling" isFailing="true"> <comment>Due to #551, the DOMs do not converge even though they will visually render ok</comment> <before> <office:automatic-styles/> <office:text><text:p>AB</text:p><text:p>CD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="3"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="3"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingMergeParagraph_MergeOnStylingEnd"> <before> <office:automatic-styles/> <office:text><text:p>ABC</text:p><text:p>D</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="3"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="4"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingMergeParagraph_MergeAfterStylingEnd"> <before> <office:automatic-styles/> <office:text><text:p>ABC</text:p><text:p>D</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="4"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingRemoveText_X[__]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="0" length="1"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p><text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingRemoveText_[X_]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="1" length="1"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">C</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingRemoveText_[_X]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="2" length="1"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">B</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingRemoveText_X[X_]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="0" length="2"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p><text:span text:style-name="auto63350368_0">C</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingRemoveText_[_X]X"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="2" length="2"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">B</text:span></text:p></office:text> </after> </test> <test name="ApplyDirectStylingRemoveText_[__]X"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="3" length="1"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span></text:p></office:text> </after> </test> <!-- TODO: Empty spans are not yet cleaned up <test name="ApplyDirectStylingRemoveText_[XX]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="RemoveText" memberid="Bob" position="2" length="2"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>AD</text:p></office:text> </after> </test> --> <test name="ApplyDirectStylingSplitParagraph_[V__]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="SplitParagraph" memberid="Bob" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A</text:p><text:p><text:span text:style-name="auto63350368_0">BC</text:span>D</text:p></office:text> </after> </test> <test name="ApplyDirectStylingSplitParagraph_[_V_]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="SplitParagraph" memberid="Bob" position="2" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">B</text:span></text:p><text:p><text:span text:style-name="auto63350368_0">C</text:span>D</text:p></office:text> </after> </test> <!-- TODO: SplitParagraph needs to be fixed to not also split text:span ending at the pos <test name="ApplyDirectStylingSplitParagraph_[__V]"> <before> <office:automatic-styles/> <office:text><text:p>ABCD</text:p></office:text> </before> <opsA> <op optype="ApplyDirectStyling" memberid="Alice" position="1" length="2"> <setProperties><style:text-properties fo:font-weight="bold" /></setProperties> </op> </opsA> <opsB> <op optype="SplitParagraph" memberid="Bob" position="3"/> </opsB> <after> <office:automatic-styles><style:style style:name="auto63350368_0" ws:scope="document-content" style:family="text"><style:text-properties fo:font-weight="bold"/></style:style></office:automatic-styles> <office:text><text:p>A<text:span text:style-name="auto63350368_0">BC</text:span></text:p><text:p>D</text:p></office:text> </after> </test> --> <test name="MoveCursor_00"> <before><office:text><text:p>ab</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="0" length="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="0" length="0"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/><c:cursor c:memberId="Bob"/>ab</text:p></office:text></after> </test> <test name="MoveCursor_11"> <before><office:text><text:p>ab</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> </opsB> <after><office:text><text:p>a<c:cursor c:memberId="Alice"/><c:cursor c:memberId="Bob"/>b</text:p></office:text></after> </test> <test name="MoveCursor_22"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="2" length="0"/> </opsB> <after><office:text><text:p>ab<c:cursor c:memberId="Alice"/><c:cursor c:memberId="Bob"/></text:p><text:p/></office:text></after> </test> <test name="MoveCursor_02"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="0" length="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="2" length="0"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/>ab<c:cursor c:memberId="Bob"/></text:p><text:p/></office:text></after> </test> <test name="InsertTextMergeParagraph_[ab]_[V]"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="InsertText" memberid="Alice" position="3" text="V"/> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="3" /> </opsB> <after><office:text><text:p>abV</text:p></office:text></after> </test> <test name="InsertTextMergeParagraph_[aVb]_[]"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="InsertText" memberid="Alice" position="1" text="V"/> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="3" /> </opsB> <after><office:text><text:p>aVb</text:p></office:text></after> </test> <test name="InsertTextMergeParagraph_[ab]_[]_[V]"> <before><office:text><text:p>ab</text:p><text:p/><text:p/></office:text></before> <opsA> <op optype="InsertText" memberid="Alice" position="4" text="V"/> </opsA> <opsB> <op optype="MergeParagraph" memberid="Bob" destinationStartPosition="0" sourceStartPosition="3" /> </opsB> <after><office:text><text:p>ab</text:p><text:p>V</text:p></office:text></after> </test> <test name="InsertTextMoveCursor_A__CV"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="0" length="2"/> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="2" text="V" moveCursor="true"/> </opsB> <after><office:text><text:p><c:anchor c:memberId="Alice"/>ab<c:cursor c:memberId="Alice"/>V</text:p><text:p/></office:text></after> </test> <test name="InsertTextMoveCursor_AV__C"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="0" length="2"/> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="0" text="V" moveCursor="true"/> </opsB> <after><office:text><text:p><c:anchor c:memberId="Alice"/>Vab<c:cursor c:memberId="Alice"/></text:p><text:p/></office:text></after> </test> <test name="InsertTextMoveCursor_A_V_C"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="0" length="2"/> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="1" text="V" moveCursor="true"/> </opsB> <after><office:text><text:p><c:anchor c:memberId="Alice"/>aVb<c:cursor c:memberId="Alice"/></text:p><text:p/></office:text></after> </test> <test name="InsertTextMoveCursor_C__AV"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="-2"/> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="2" text="V" moveCursor="true"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/>ab<c:anchor c:memberId="Alice"/>V</text:p><text:p/></office:text></after> </test> <test name="InsertTextMoveCursor_CV__A"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="-2"/> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="0" text="V" moveCursor="true"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/>Vab<c:anchor c:memberId="Alice"/></text:p><text:p/></office:text></after> </test> <test name="InsertTextMoveCursor_C_V_A"> <before><office:text><text:p>ab</text:p><text:p/></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="-2"/> </opsA> <opsB> <op optype="InsertText" memberid="Bob" position="1" text="V" moveCursor="true"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/>aVb<c:anchor c:memberId="Alice"/></text:p><text:p/></office:text></after> </test> <test name="InsertText_aTb"> <before><office:text><text:p>T</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="InsertText" memberid="Alice" position="0" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="InsertText" memberid="Bob" position="1" text="b" moveCursor="true"/> </opsB> <after><office:text><text:p>a<c:cursor c:memberId="Alice"/>Tb<c:cursor c:memberId="Bob"/></text:p></office:text></after> </test> <test name="InsertText_baT"> <before><office:text><text:p>T</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="InsertText" memberid="Alice" position="0" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="InsertText" memberid="Bob" position="0" text="b" moveCursor="true"/> </opsB> <after><office:text><text:p>b<c:cursor c:memberId="Bob"/>a<c:cursor c:memberId="Alice"/>T</text:p></office:text></after> </test> <test name="SplitParagraph_VaV"> <before><office:text><text:p>a</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="SplitParagraph" memberid="Alice" position="0" moveCursor="true" sourceParagraphPosition="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after><office:text><text:p/><text:p><c:cursor c:memberId="Alice"/>a</text:p><text:p><c:cursor c:memberId="Bob"/></text:p></office:text></after> </test> <test name="SplitParagraph_aVVb"> <before><office:text><text:p>ab</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="SplitParagraph" memberid="Alice" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after><office:text><text:p>a</text:p><text:p><c:cursor c:memberId="Bob"/></text:p><text:p><c:cursor c:memberId="Alice"/>b</text:p></office:text></after> </test> <test name="InsertTextSetParagraphStyle_before"> <before> <office:text><text:p/><text:p/></office:text> </before> <opsA> <op optype="InsertText" position="0" text="abc"/> </opsA> <opsB> <op optype="SetParagraphStyle" position="1" styleName="S"/> </opsB> <after> <office:text><text:p>abc</text:p><text:p text:style-name="S"/></office:text> </after> </test> <test name="InsertTextSetParagraphStyle_samePos"> <before> <office:text><text:p/><text:p/></office:text> </before> <opsA> <op optype="InsertText" position="1" text="abc"/> </opsA> <opsB> <op optype="SetParagraphStyle" position="1" styleName="S"/> </opsB> <after> <office:text><text:p/><text:p text:style-name="S">abc</text:p></office:text> </after> </test> <test name="InsertTextSetParagraphStyle_after"> <before> <office:text><text:p/><text:p>123</text:p></office:text> </before> <opsA> <op optype="InsertText" position="4" text="abc"/> </opsA> <opsB> <op optype="SetParagraphStyle" position="1" styleName="S"/> </opsB> <after> <office:text><text:p/><text:p text:style-name="S">123abc</text:p></office:text> </after> </test> <test name="InsertTextSplitParagraph_TaVT"> <before><office:text><text:p>TT</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="1" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after><office:text><text:p>Ta<c:cursor c:memberId="Alice"/></text:p><text:p><c:cursor c:memberId="Bob"/>T</text:p></office:text></after> </test> <test name="InsertTextSplitParagraph_TaTV"> <before><office:text><text:p>TT</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="1" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="2" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after><office:text><text:p>Ta<c:cursor c:memberId="Alice"/>T</text:p><text:p><c:cursor c:memberId="Bob"/></text:p></office:text></after> </test> <test name="InsertTextSplitParagraph_TVTa"> <before><office:text><text:p>TT</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="2" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after><office:text><text:p>T</text:p><text:p><c:cursor c:memberId="Bob"/>Ta<c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="InsertTextSplitParagraph_InsertBeforeSplit"> <comment>Insert text between split position and paragraph start position</comment> <before><office:text><text:p>TT</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="0" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsB> <after><office:text><text:p>a<c:cursor c:memberId="Alice"/>T</text:p><text:p><c:cursor c:memberId="Bob"/>T</text:p></office:text></after> </test> <test name="InsertTextSplitParagraph_InsertInParagraphBeforeSplit"> <comment>Insert text in paragraph before split the paragraph to be split</comment> <before><office:text><text:p>A</text:p><text:p>B</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="0" text="a" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="SplitParagraph" memberid="Bob" position="3" moveCursor="true" sourceParagraphPosition="2"/> </opsB> <after><office:text><text:p>a<c:cursor c:memberId="Alice"/>A</text:p><text:p>B</text:p><text:p><c:cursor c:memberId="Bob"/></text:p></office:text></after> </test> <test name="RemoveTextRemoveText_{B}[CDE]"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="RemoveText" memberid="Bob" position="1" length="1"/> </opsB> <after><office:text><text:p>A<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_[CDE]{F}"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="5" length="0"/> <op optype="RemoveText" memberid="Bob" position="5" length="1"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>G</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_{B[CDE]F}"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="RemoveText" memberid="Bob" position="1" length="5"/> </opsB> <after><office:text><text:p>A<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>G</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_[C{D}E]"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="3" length="0"/> <op optype="RemoveText" memberid="Bob" position="3" length="1"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_[{CD}E]"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="2" length="0"/> <op optype="RemoveText" memberid="Bob" position="2" length="2"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_[C{DE}]"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="3" length="0"/> <op optype="RemoveText" memberid="Bob" position="3" length="2"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_[{CDE}]"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="2" length="0"/> <op optype="RemoveText" memberid="Bob" position="2" length="3"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_{B[CDE]}"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="RemoveText" memberid="Bob" position="1" length="4"/> </opsB> <after><office:text><text:p>A<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_{[CDE]F}"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="2" length="0"/> <op optype="RemoveText" memberid="Bob" position="2" length="4"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>G</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_[C{E]F}"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="3" length="0"/> <op optype="RemoveText" memberid="Bob" position="3" length="3"/> </opsB> <after><office:text><text:p>AB<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>G</text:p></office:text></after> </test> <test name="RemoveTextRemoveText_{B[CD}E]"> <before><office:text><text:p>ABCDEFG</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="2" length="0"/> <op optype="RemoveText" memberid="Alice" position="2" length="3"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="MoveCursor" memberid="Bob" position="1" length="0"/> <op optype="RemoveText" memberid="Bob" position="1" length="3"/> </opsB> <after><office:text><text:p>A<c:cursor c:memberId="Bob"/><c:cursor c:memberId="Alice"/>FG</text:p></office:text></after> </test> <test name="RemoveTextSplitParagraph_[AB|CD]"> <before><office:text><text:p>ABCD</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="RemoveText" memberid="Alice" position="0" length="4"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="SplitParagraph" memberid="Bob" position="2" sourceParagraphPosition="0" moveCursor="true"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Alice"/></text:p><text:p><c:cursor c:memberId="Bob"/></text:p></office:text></after> </test> <test name="InsertTextRemoveText_VT"> <before><office:text><text:p>T</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="InsertText" memberid="Alice" position="0" text="V" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveText" memberid="Bob" position="0" length="1"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Bob"/>V<c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="InsertTextRemoveText_TV"> <before><office:text><text:p>T</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="1" text="V" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveText" memberid="Bob" position="0" length="1"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Bob"/>V<c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="InsertTextRemoveText_TVT"> <before><office:text><text:p>TT</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="InsertText" memberid="Alice" position="1" text="V" moveCursor="true"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveText" memberid="Bob" position="0" length="2"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Bob"/>V<c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="RemoveTextSetParagraphStyle_before"> <before> <office:text><text:p>abc</text:p><text:p>def</text:p></office:text> </before> <opsA> <op optype="RemoveText" position="1" length="1"/> </opsA> <opsB> <op optype="SetParagraphStyle" position="4" styleName="S"/> </opsB> <after> <office:text><text:p>ac</text:p><text:p text:style-name="S">def</text:p></office:text> </after> </test> <test name="RemoveTextSetParagraphStyle_samePos"> <before> <office:text><text:p>abc</text:p><text:p>def</text:p></office:text> </before> <opsA> <op optype="RemoveText" position="4" length="1"/> </opsA> <opsB> <op optype="SetParagraphStyle" position="4" styleName="S"/> </opsB> <after> <office:text><text:p>abc</text:p><text:p text:style-name="S">ef</text:p></office:text> </after> </test> <test name="RemoveTextSetParagraphStyle_after"> <before> <office:text><text:p>abc</text:p><text:p>def</text:p></office:text> </before> <opsA> <op optype="RemoveText" position="5" length="1"/> </opsA> <opsB> <op optype="SetParagraphStyle" position="4" styleName="S"/> </opsB> <after> <office:text><text:p>abc</text:p><text:p text:style-name="S">df</text:p></office:text> </after> </test> <test name="SplitParagraphRemoveText_VT"> <before><office:text><text:p>T</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="SplitParagraph" memberid="Alice" position="0" moveCursor="true" sourceParagraphPosition="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveText" memberid="Bob" position="0" length="1"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Bob"/></text:p><text:p><c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="SplitParagraphRemoveText_TV"> <before><office:text><text:p>T</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="SplitParagraph" memberid="Alice" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveText" memberid="Bob" position="0" length="1"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Bob"/></text:p><text:p><c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="SplitParagraphRemoveText_TVT"> <before><office:text><text:p>TT</text:p></office:text></before> <opsA> <op optype="AddCursor" memberid="Alice"/> <op optype="MoveCursor" memberid="Alice" position="1" length="0"/> <op optype="SplitParagraph" memberid="Alice" position="1" moveCursor="true" sourceParagraphPosition="0"/> </opsA> <opsB> <op optype="AddCursor" memberid="Bob"/> <op optype="RemoveText" memberid="Bob" position="0" length="2"/> </opsB> <after><office:text><text:p><c:cursor c:memberId="Bob"/></text:p><text:p><c:cursor c:memberId="Alice"/></text:p></office:text></after> </test> <test name="AddParagraphStyleAddParagraphStyle"> <before> <office:styles><style:style style:name="S" style:family="paragraph" style:class="text"></style:style></office:styles> <office:text><text:p/></office:text> </before> <opsA> <op optype="AddStyle" memberid="Alice" styleName="CA" styleFamily="paragraph"><setProperties style:class="text" style:display-name="Cloned from A"/></op> </opsA> <opsB> <op optype="AddStyle" memberid="Bob" styleName="CB" styleFamily="paragraph"><setProperties style:class="text"/></op> </opsB> <after> <office:styles><style:style style:name="S" style:family="paragraph" style:class="text"/><style:style style:name="CB" style:family="paragraph" style:class="text"/><style:style style:name="CA" style:display-name="Cloned from A" style:family="paragraph" style:class="text"/></office:styles> <office:text><text:p/></office:text> </after> </test> <test name="RemoveParagraphStyleRemoveParagraphStyle"> <before><office:styles><style:style style:name="S" style:family="paragraph" style:class="text"></style:style></office:styles><office:text><text:p/></office:text></before> <opsA> <op optype="RemoveStyle" memberid="Alice" styleName="S" styleFamily="paragraph"/> </opsA> <opsB> <op optype="RemoveStyle" memberid="Bob" styleName="S" styleFamily="paragraph"/> </opsB> <after><office:styles></office:styles><office:text><text:p/></office:text></after> </test> <test name="RemoveParagraphStyleSplitParagraph"> <before><office:styles><style:style style:name="S" style:family="paragraph" style:class="text"/></office:styles><office:text><text:p text:style-name="S"/></office:text></before> <opsA> <op optype="SetParagraphStyle" memberid="Alice" position="0" sourceParagraphPosition="0" styleName=""/> <op optype="RemoveStyle" memberid="Alice" styleName="S" styleFamily="paragraph"/> </opsA> <opsB> <op optype="SplitParagraph" memberid="Bob" position="0" sourceParagraphPosition="0" paragraphStyleName="S"/> </opsB> <after><office:styles/><office:text><text:p/><text:p/></office:text></after> </test> <test name="AddParagraphStyleRemoveParagraphStyle_nextStyleName"> <before> <office:styles><style:style style:name="S" style:family="paragraph" style:class="text"/></office:styles> <office:text><text:p/></office:text> </before> <opsA> <op optype="AddStyle" memberid="Alice" styleName="S2" styleFamily="paragraph"><setProperties style:class="text" style:next-style-name="S"/></op> </opsA> <opsB> <op optype="RemoveStyle" memberid="Bob" styleName="S" styleFamily="paragraph"/> </opsB> <after> <office:styles><style:style style:name="S2" style:family="paragraph" style:class="text"/></office:styles> <office:text><text:p/></office:text> </after> </test> <test name="AddParagraphStyleRemoveParagraphStyle_parentStyleName"> <before> <office:styles><style:style style:name="S" style:family="paragraph" style:class="text"/></office:styles> <office:text><text:p/></office:text> </before> <opsA> <op optype="AddStyle" memberid="Alice" styleName="S2" styleFamily="paragraph"><setProperties style:class="text" style:parent-style-name="S"/></op> </opsA> <opsB> <op optype="RemoveStyle" memberid="Bob" styleName="S" styleFamily="paragraph"/> </opsB> <after> <office:styles><style:style style:name="S2" style:family="paragraph" style:class="text"/></office:styles> <office:text><text:p/></office:text> </after> </test> <test name="UpdateParagraphStyleRemoveParagraphStyle_sameStyle"> <before><office:styles><style:style style:name="S" style:family="paragraph" style:class="text"></style:style></office:styles><office:text><text:p/></office:text></before> <opsA> <op optype="UpdateParagraphStyle" memberid="Alice" styleName="S"><setProperties><style:text-properties fo:font-size="8pt"/></setProperties></op> </opsA> <opsB> <op optype="RemoveStyle" memberid="Bob" styleName="S" styleFamily="paragraph"/> </opsB> <after><office:styles></office:styles><office:text><text:p/></office:text></after> </test> <test name="UpdateParagraphStyleRemoveParagraphStyle_nextStyleName"> <before> <office:styles><style:style style:name="S" style:family="paragraph" style:class="text"/><style:style style:name="S2" style:fam