diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java b/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java index 52aa2857213c..d0503a07f275 100644 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java +++ b/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java @@ -1,212 +1,249 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * 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 com.intellij.codeInsight.editorActions.moveUpDown; - -import com.intellij.lang.injection.InjectedLanguageManager; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiNamedElement; -import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.html.HtmlTag; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.xml.XmlAttribute; -import com.intellij.psi.xml.XmlFile; -import com.intellij.psi.xml.XmlTag; -import com.intellij.psi.xml.XmlText; -import org.jetbrains.annotations.NotNull; - -class XmlMover extends LineMover { - //private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.actions.moveUpDown.XmlMover"); - - public boolean checkAvailable(@NotNull final Editor editor, @NotNull final PsiFile file, @NotNull final MoveInfo info, final boolean down) { - if (!(file instanceof XmlFile)) { - return false; - } - boolean available = super.checkAvailable(editor, file, info, down); - if (!available) return false; - - // updated moved range end to cover multiline tag start - final Document document = editor.getDocument(); - int movedLineStart = document.getLineStartOffset(info.toMove.startLine); - final int movedLineEnd = document.getLineEndOffset(info.toMove.endLine - 1); - - PsiElement movedEndElement = file.findElementAt(movedLineEnd); - if (movedEndElement instanceof PsiWhiteSpace) movedEndElement = PsiTreeUtil.prevLeaf(movedEndElement); - PsiElement movedStartElement = file.findElementAt(movedLineStart); - if (movedStartElement instanceof PsiWhiteSpace) movedStartElement = PsiTreeUtil.nextLeaf(movedStartElement); - - if (movedEndElement == null || movedStartElement == null) return false; - final PsiNamedElement namedParentAtEnd = PsiTreeUtil.getParentOfType(movedEndElement, PsiNamedElement.class); - final PsiNamedElement namedParentAtStart = PsiTreeUtil.getParentOfType(movedStartElement, PsiNamedElement.class); - - final XmlText text = PsiTreeUtil.getParentOfType(movedStartElement, XmlText.class); - final XmlText text2 = PsiTreeUtil.getParentOfType(movedEndElement, XmlText.class); - - // Let's do not care about injections for this mover - if ( ( text != null && InjectedLanguageManager.getInstance(text.getProject()).getInjectedPsiFiles(text) != null) || - ( text2 != null && InjectedLanguageManager.getInstance(text2.getProject()).getInjectedPsiFiles(text2) != null)) { - return false; - } - - XmlTag nearestTag = PsiTreeUtil.getParentOfType(movedStartElement, XmlTag.class); - if (nearestTag != null && - ( "script".equals(nearestTag.getLocalName()) || - (nearestTag instanceof HtmlTag && "script".equalsIgnoreCase(nearestTag.getLocalName())) - ) - ) { - return false; - } - - PsiNamedElement movedParent = null; - - if (namedParentAtEnd == namedParentAtStart) movedParent = namedParentAtEnd; - else if (namedParentAtEnd instanceof XmlAttribute && namedParentAtStart instanceof XmlTag && namedParentAtEnd.getParent() == namedParentAtStart) { - movedParent = namedParentAtStart; - } else if (namedParentAtStart instanceof XmlAttribute && namedParentAtEnd instanceof XmlTag && namedParentAtStart.getParent() == namedParentAtEnd) { - movedParent = namedParentAtEnd; - } - - if (movedParent == null) { - return false; - } - - final TextRange textRange = movedParent.getTextRange(); - - if (movedParent instanceof XmlTag) { - final XmlTag tag = (XmlTag)movedParent; - final TextRange valueRange = tag.getValue().getTextRange(); - final int valueStart = valueRange.getStartOffset(); - - if (movedLineStart < valueStart && valueStart + 1 < document.getTextLength()) { - movedLineStart = updateMovedRegionEnd(document, movedLineStart, valueStart + 1, info, down); - } - if (movedLineStart < valueStart) { - movedLineStart = updatedMovedRegionStart(document, movedLineStart, tag.getTextRange().getStartOffset(), info, down); - } - } else if (movedParent instanceof XmlAttribute) { - final int endOffset = textRange.getEndOffset() + 1; - if (endOffset < document.getTextLength()) movedLineStart = updateMovedRegionEnd(document, movedLineStart, endOffset, info, down); - movedLineStart = updatedMovedRegionStart(document, movedLineStart, textRange.getStartOffset(), info, down); - } - - final TextRange moveDestinationRange = new TextRange( - document.getLineStartOffset(info.toMove2.startLine), - document.getLineStartOffset(info.toMove2.endLine) - ); - - if (movedParent instanceof XmlAttribute) { - final XmlTag parent = ((XmlAttribute)movedParent).getParent(); - - if (parent != null) { - final TextRange valueRange = parent.getValue().getTextRange(); - - // Do not move attributes out of tags - if ( (down && moveDestinationRange.getEndOffset() >= valueRange.getStartOffset()) || - (!down && moveDestinationRange.getStartOffset() <= parent.getTextRange().getStartOffset()) - ) { - info.toMove2 = null; - } - } - } - - if (down) { - PsiElement updatedElement = file.findElementAt(moveDestinationRange.getEndOffset()); - if (updatedElement instanceof PsiWhiteSpace) updatedElement = PsiTreeUtil.prevLeaf(updatedElement); - - if (updatedElement != null) { - final PsiNamedElement namedParent = PsiTreeUtil.getParentOfType(updatedElement, movedParent.getClass()); - - if (namedParent instanceof XmlTag) { - final XmlTag tag = (XmlTag)namedParent; - final int offset = tag.isEmpty() ? tag.getTextRange().getStartOffset() : tag.getValue().getTextRange().getStartOffset(); - updatedMovedIntoEnd(document, info, offset); - } else if (namedParent instanceof XmlAttribute) { - updatedMovedIntoEnd(document, info, namedParent.getTextRange().getEndOffset()); - } - } - } else { - PsiElement updatedElement = file.findElementAt(moveDestinationRange.getStartOffset()); - if (updatedElement instanceof PsiWhiteSpace) updatedElement = PsiTreeUtil.nextLeaf(updatedElement); - - if (updatedElement != null) { - final PsiNamedElement namedParent = PsiTreeUtil.getParentOfType(updatedElement, movedParent.getClass()); - - if (namedParent instanceof XmlTag) { - final XmlTag tag = (XmlTag)namedParent; - final TextRange tagValueRange = tag.getValue().getTextRange(); - - // We need to update destination range to jump over tag start - final XmlTag[] subtags = tag.getSubTags(); - if ((tagValueRange.contains(movedLineStart) && subtags.length > 0 && subtags[0] == movedParent) || - ( tagValueRange.getLength() == 0 && tag.getTextRange().intersects(moveDestinationRange)) - ) { - final int line = document.getLineNumber(tag.getTextRange().getStartOffset()); - final LineRange toMove2 = info.toMove2; - info.toMove2 = new LineRange(Math.min(line, toMove2.startLine), toMove2.endLine); - } - } else if (namedParent instanceof XmlAttribute) { - final int line = document.getLineNumber(namedParent.getTextRange().getStartOffset()); - final LineRange toMove2 = info.toMove2; - info.toMove2 = new LineRange(Math.min(line, toMove2.startLine), toMove2.endLine); - } - } - } - - return true; - } - - private void updatedMovedIntoEnd(final Document document, @NotNull final MoveInfo info, final int offset) { - if (offset + 1 < document.getTextLength()) { - final int line = document.getLineNumber(offset + 1); - final LineRange toMove2 = info.toMove2; - if (toMove2 == null) return; - info.toMove2 = new LineRange(toMove2.startLine, Math.min(Math.max(line, toMove2.endLine), document.getLineCount() - 1)); - } - } - - private int updatedMovedRegionStart(final Document document, int movedLineStart, final int offset, @NotNull final MoveInfo info, final boolean down) { - final int line = document.getLineNumber(offset); - final LineRange toMove = info.toMove; - int delta = toMove.startLine - line; - info.toMove = new LineRange(Math.min(line, toMove.startLine), toMove.endLine); - - // update moved range - if (delta > 0 && !down) { - final LineRange toMove2 = info.toMove2; - info.toMove2 = new LineRange(toMove2.startLine - delta, toMove2.endLine - delta); - movedLineStart = document.getLineStartOffset(toMove.startLine); - } - return movedLineStart; - } - - private int updateMovedRegionEnd(final Document document, int movedLineStart, final int valueStart, @NotNull final MoveInfo info, final boolean down) { - final int line = document.getLineNumber(valueStart); - final LineRange toMove = info.toMove; - int delta = line - toMove.endLine; - info.toMove = new LineRange(toMove.startLine, Math.max(line, toMove.endLine)); - - // update moved range - if (delta > 0 && down) { - final LineRange toMove2 = info.toMove2; - info.toMove2 = new LineRange(toMove2.startLine + delta, Math.min(toMove2.endLine + delta, document.getLineCount() - 1)); - movedLineStart = document.getLineStartOffset(toMove.startLine); - } - return movedLineStart; - } +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * 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 com.intellij.codeInsight.editorActions.moveUpDown; + +import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiNamedElement; +import com.intellij.psi.PsiWhiteSpace; +import com.intellij.psi.html.HtmlTag; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.xml.XmlAttribute; +import com.intellij.psi.xml.XmlFile; +import com.intellij.psi.xml.XmlTag; +import com.intellij.psi.xml.XmlText; +import org.jetbrains.annotations.NotNull; + +class XmlMover extends LineMover { + //private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.actions.moveUpDown.XmlMover"); + + public boolean checkAvailable(@NotNull final Editor editor, @NotNull final PsiFile file, @NotNull final MoveInfo info, final boolean down) { + if (!(file instanceof XmlFile)) { + return false; + } + if (!super.checkAvailable(editor, file, info, down)) return false; + + // updated moved range end to cover multiline tag start + final Document document = editor.getDocument(); + int movedLineStart = document.getLineStartOffset(info.toMove.startLine); + final int movedLineEnd = document.getLineEndOffset(info.toMove.endLine - 1); + + PsiElement movedEndElement = file.findElementAt(movedLineEnd); + if (movedEndElement instanceof PsiWhiteSpace) movedEndElement = PsiTreeUtil.prevLeaf(movedEndElement); + PsiElement movedStartElement = file.findElementAt(movedLineStart); + if (movedStartElement instanceof PsiWhiteSpace) movedStartElement = PsiTreeUtil.nextLeaf(movedStartElement); + + if (movedEndElement == null || movedStartElement == null) return false; + final PsiNamedElement namedParentAtEnd = PsiTreeUtil.getParentOfType(movedEndElement, PsiNamedElement.class); + final PsiNamedElement namedParentAtStart = PsiTreeUtil.getParentOfType(movedStartElement, PsiNamedElement.class); + + if (checkInjections(movedEndElement, movedStartElement)) return false; + + XmlTag nearestTag = PsiTreeUtil.getParentOfType(movedStartElement, XmlTag.class); + if (nearestTag != null && + ( "script".equals(nearestTag.getLocalName()) || + (nearestTag instanceof HtmlTag && "script".equalsIgnoreCase(nearestTag.getLocalName())) + ) + ) { + return false; + } + + PsiNamedElement movedParent = null; + + if (namedParentAtEnd == namedParentAtStart) movedParent = namedParentAtEnd; + else if (namedParentAtEnd instanceof XmlAttribute && namedParentAtStart instanceof XmlTag && namedParentAtEnd.getParent() == namedParentAtStart) { + movedParent = namedParentAtStart; + } else if (namedParentAtStart instanceof XmlAttribute && namedParentAtEnd instanceof XmlTag && namedParentAtStart.getParent() == namedParentAtEnd) { + movedParent = namedParentAtEnd; + } + + if (movedParent == null) { + return false; + } + + final TextRange textRange = movedParent.getTextRange(); + + if (movedParent instanceof XmlTag) { + final XmlTag tag = (XmlTag)movedParent; + final TextRange valueRange = tag.getValue().getTextRange(); + final int valueStart = valueRange.getStartOffset(); + + if (movedLineStart < valueStart && valueStart + 1 < document.getTextLength()) { + movedLineStart = updateMovedRegionEnd(document, movedLineStart, valueStart + 1, info, down); + } + if (movedLineStart < valueStart) { + movedLineStart = updateMovedRegionStart(document, movedLineStart, tag.getTextRange().getStartOffset(), info, down); + } + } else if (movedParent instanceof XmlAttribute) { + final int endOffset = textRange.getEndOffset() + 1; + if (endOffset < document.getTextLength()) movedLineStart = updateMovedRegionEnd(document, movedLineStart, endOffset, info, down); + movedLineStart = updateMovedRegionStart(document, movedLineStart, textRange.getStartOffset(), info, down); + } + + final TextRange moveDestinationRange = new TextRange( + document.getLineStartOffset(info.toMove2.startLine), + document.getLineStartOffset(info.toMove2.endLine) - 1 + ); + + if (movedParent instanceof XmlAttribute) { + final XmlTag parent = ((XmlAttribute)movedParent).getParent(); + + if (parent != null) { + final TextRange valueRange = parent.getValue().getTextRange(); + + // Do not move attributes out of tags + if ( (down && moveDestinationRange.getEndOffset() >= valueRange.getStartOffset()) || + (!down && moveDestinationRange.getStartOffset() <= parent.getTextRange().getStartOffset()) + ) { + info.toMove2 = null; + } + } + } + + if (down) { + PsiElement updatedElement = file.findElementAt(moveDestinationRange.getEndOffset()); + if (updatedElement instanceof PsiWhiteSpace) updatedElement = PsiTreeUtil.prevLeaf(updatedElement); + + if (updatedElement != null) { + final PsiNamedElement namedParent = PsiTreeUtil.getParentOfType(updatedElement, movedParent.getClass()); + + if (namedParent instanceof XmlTag) { + if (checkParents(info, movedParent, namedParent, file, document)) return true; + + final XmlTag tag = (XmlTag)namedParent; + final int offset = tag.isEmpty() ? tag.getTextRange().getStartOffset() : tag.getValue().getTextRange().getStartOffset(); + updatedMovedIntoEnd(document, info, offset); + if (tag.isEmpty()) { + info.toMove2 = new LineRange(namedParent); + } + } else if (namedParent instanceof XmlAttribute) { + updatedMovedIntoEnd(document, info, namedParent.getTextRange().getEndOffset()); + } + } + } else { + PsiElement updatedElement = file.findElementAt(moveDestinationRange.getStartOffset()); + if (updatedElement instanceof PsiWhiteSpace) updatedElement = PsiTreeUtil.nextLeaf(updatedElement); + + if (updatedElement != null) { + final PsiNamedElement namedParent = PsiTreeUtil.getParentOfType(updatedElement, movedParent.getClass()); + + if (namedParent instanceof XmlTag) { + final XmlTag tag = (XmlTag)namedParent; + final TextRange tagValueRange = tag.getValue().getTextRange(); + + // We need to update destination range to jump over tag start + final XmlTag[] subtags = tag.getSubTags(); + if ((tagValueRange.contains(movedLineStart) && subtags.length > 0 && subtags[0] == movedParent) || + ( tagValueRange.getLength() == 0 && tag.getTextRange().intersects(moveDestinationRange)) + ) { + final int line = document.getLineNumber(tag.getTextRange().getStartOffset()); + final LineRange toMove2 = info.toMove2; + info.toMove2 = new LineRange(Math.min(line, toMove2.startLine), toMove2.endLine); + } + checkParents(info, movedParent, namedParent, file, document); + + } else if (namedParent instanceof XmlAttribute) { + final int line = document.getLineNumber(namedParent.getTextRange().getStartOffset()); + final LineRange toMove2 = info.toMove2; + info.toMove2 = new LineRange(Math.min(line, toMove2.startLine), toMove2.endLine); + } + } + } + + return true; + } + + private static boolean checkParents(MoveInfo info, + PsiNamedElement movedParent, + PsiNamedElement targetParent, + PsiFile file, + Document document) { + // don't jump into your own children! + if (targetParent.getParent() == movedParent) { + info.toMove2 = null; + return true; + } + + if (movedParent.getParent() == targetParent) { +// info.toMove = new LineRange(); + // well, target parent may be not detected right + int offset = document.getLineStartOffset(info.toMove2.startLine); + //PsiElement element = file.findElementAt(offset); + //info.toMove2 = null; + //return true; + } + return false; + } + + private static boolean checkInjections(PsiElement movedEndElement, PsiElement movedStartElement) { + final XmlText text = PsiTreeUtil.getParentOfType(movedStartElement, XmlText.class); + final XmlText text2 = PsiTreeUtil.getParentOfType(movedEndElement, XmlText.class); + + // Let's do not care about injections for this mover + if ( ( text != null && InjectedLanguageManager.getInstance(text.getProject()).getInjectedPsiFiles(text) != null) || + ( text2 != null && InjectedLanguageManager.getInstance(text2.getProject()).getInjectedPsiFiles(text2) != null)) { + return true; + } + return false; + } + + private void updatedMovedIntoEnd(final Document document, @NotNull final MoveInfo info, final int offset) { + if (offset + 1 < document.getTextLength()) { + final int line = document.getLineNumber(offset + 1); + final LineRange toMove2 = info.toMove2; + if (toMove2 == null) return; + info.toMove2 = new LineRange(toMove2.startLine, Math.min(Math.max(line, toMove2.endLine), document.getLineCount() - 1)); + } + } + + private int updateMovedRegionStart(final Document document, + int movedLineStart, + final int offset, + @NotNull final MoveInfo info, + final boolean down) { + final int line = document.getLineNumber(offset); + final LineRange toMove = info.toMove; + int delta = toMove.startLine - line; + info.toMove = new LineRange(Math.min(line, toMove.startLine), toMove.endLine); + + // update moved range + if (delta > 0 && !down) { + final LineRange toMove2 = info.toMove2; + info.toMove2 = new LineRange(toMove2.startLine - delta, toMove2.endLine - delta); + movedLineStart = document.getLineStartOffset(toMove.startLine); + } + return movedLineStart; + } + + private int updateMovedRegionEnd(final Document document, int movedLineStart, final int valueStart, @NotNull final MoveInfo info, final boolean down) { + final int line = document.getLineNumber(valueStart); + final LineRange toMove = info.toMove; + int delta = line - toMove.endLine; + info.toMove = new LineRange(toMove.startLine, Math.max(line, toMove.endLine)); + + // update moved range + if (delta > 0 && down) { + final LineRange toMove2 = info.toMove2; + info.toMove2 = new LineRange(toMove2.startLine + delta, Math.min(toMove2.endLine + delta, document.getLineCount() - 1)); + movedLineStart = document.getLineStartOffset(toMove.startLine); + } + return movedLineStart; + } } \ No newline at end of file diff --git a/xml/tests/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMoverTest.java b/xml/tests/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMoverTest.java index 8c9c78494ecd..90edebceb6e5 100644 --- a/xml/tests/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMoverTest.java +++ b/xml/tests/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMoverTest.java @@ -25,30 +25,32 @@ public class XmlMoverTest extends CodeInsightTestCase { public void testTag10() throws Exception { doTest("xml"); } public void testTag11() throws Exception { doTest("xml"); } + public void testMultiLineTag() throws Exception { doTest("xml"); } + + public void testRootTag() throws Exception { doTest("xml"); } + public void testRootTag1() throws Exception { doTest("xml"); } +// public void testSingleTag() throws Exception { doTest("xml"); } + public void test1() throws Exception { doTest("html"); } + private void doTest(String ext) throws Exception { final String baseName = getBasePath() + '/' + getTestName(true); final String fileName = baseName + "."+ext; - try { - @NonNls String afterFileName = baseName + "_afterUp." + ext; - EditorActionHandler handler = new MoveStatementUpAction().getHandler(); - performAction(fileName, handler, afterFileName); + @NonNls String afterFileName = baseName + "_afterUp." + ext; + EditorActionHandler handler = new MoveStatementUpAction().getHandler(); + performAction(fileName, handler, afterFileName); - afterFileName = baseName + "_afterDown." + ext; - handler = new MoveStatementDownAction().getHandler(); - performAction(fileName, handler, afterFileName); - } - finally { - //CodeStyleSettingsManager.getInstance(myProject).dropTemporarySettings(); - } + afterFileName = baseName + "_afterDown." + ext; + handler = new MoveStatementDownAction().getHandler(); + performAction(fileName, handler, afterFileName); } private void performAction(final String fileName, final EditorActionHandler handler, final String afterFileName) throws Exception { configureByFile(fileName); final boolean enabled = handler.isEnabled(myEditor, null); - assertEquals(new File(getTestDataPath(), afterFileName).exists(), enabled); + assertEquals("not enabled for " + afterFileName, new File(getTestDataPath(), afterFileName).exists(), enabled); if (enabled) { handler.execute(myEditor, null); checkResultByFile(afterFileName); diff --git a/xml/tests/testData/mover/multiLineTag.xml b/xml/tests/testData/mover/multiLineTag.xml new file mode 100644 index 000000000000..655371558a52 --- /dev/null +++ b/xml/tests/testData/mover/multiLineTag.xml @@ -0,0 +1,8 @@ + + + attribute="test2"/> + + diff --git a/xml/tests/testData/mover/multiLineTag_afterDown.xml b/xml/tests/testData/mover/multiLineTag_afterDown.xml new file mode 100644 index 000000000000..1839644041e0 --- /dev/null +++ b/xml/tests/testData/mover/multiLineTag_afterDown.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/xml/tests/testData/mover/multiLineTag_afterUp.xml b/xml/tests/testData/mover/multiLineTag_afterUp.xml new file mode 100644 index 000000000000..577140a52de6 --- /dev/null +++ b/xml/tests/testData/mover/multiLineTag_afterUp.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/xml/tests/testData/mover/rootTag.xml b/xml/tests/testData/mover/rootTag.xml new file mode 100644 index 000000000000..a648517b68b7 --- /dev/null +++ b/xml/tests/testData/mover/rootTag.xml @@ -0,0 +1,6 @@ +st> + + + diff --git a/xml/tests/testData/mover/rootTag1.xml b/xml/tests/testData/mover/rootTag1.xml new file mode 100644 index 000000000000..5a3cc31dbd39 --- /dev/null +++ b/xml/tests/testData/mover/rootTag1.xml @@ -0,0 +1,6 @@ + + + +st> diff --git a/xml/tests/testData/mover/singleTag.xml b/xml/tests/testData/mover/singleTag.xml new file mode 100644 index 000000000000..74614a39b904 --- /dev/null +++ b/xml/tests/testData/mover/singleTag.xml @@ -0,0 +1,8 @@ + + st> + + + + \ No newline at end of file diff --git a/xml/tests/testData/mover/singleTag_afterDown.xml b/xml/tests/testData/mover/singleTag_afterDown.xml new file mode 100644 index 000000000000..74614a39b904 --- /dev/null +++ b/xml/tests/testData/mover/singleTag_afterDown.xml @@ -0,0 +1,8 @@ + + st> + + + + \ No newline at end of file diff --git a/xml/tests/testData/mover/singleTag_afterUp.xml b/xml/tests/testData/mover/singleTag_afterUp.xml new file mode 100644 index 000000000000..74614a39b904 --- /dev/null +++ b/xml/tests/testData/mover/singleTag_afterUp.xml @@ -0,0 +1,8 @@ + + st> + + + + \ No newline at end of file