You are viewing a plain text version of this content. The canonical link for it is here.
Posted to odf-commits@incubator.apache.org by sv...@apache.org on 2016/06/08 07:18:50 UTC

svn commit: r1747358 [3/3] - in /incubator/odf/trunk/simple/src: main/java/org/odftoolkit/simple/Document.java test/java/org/odftoolkit/simple/text/SectionTest.java test/resources/SectionContinuedList.odt

Modified: incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/text/SectionTest.java
URL: http://svn.apache.org/viewvc/incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/text/SectionTest.java?rev=1747358&r1=1747357&r2=1747358&view=diff
==============================================================================
--- incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/text/SectionTest.java (original)
+++ incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/text/SectionTest.java Wed Jun  8 07:18:50 2016
@@ -1,662 +1,724 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-
-package org.odftoolkit.simple.text;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import junit.framework.Assert;
-import org.junit.Test;
-import org.odftoolkit.odfdom.dom.element.draw.DrawImageElement;
-import org.odftoolkit.odfdom.dom.element.table.TableTableElement;
-import org.odftoolkit.odfdom.pkg.OdfElement;
-import org.odftoolkit.odfdom.pkg.OdfPackage;
-import org.odftoolkit.simple.TextDocument;
-import org.odftoolkit.simple.table.Cell;
-import org.odftoolkit.simple.table.Table;
-import org.odftoolkit.simple.text.list.List;
-import org.odftoolkit.simple.text.list.ListDecorator;
-import org.odftoolkit.simple.text.list.ListTest;
-import org.odftoolkit.simple.text.list.NumberDecorator;
-import org.odftoolkit.simple.text.list.OutLineDecorator;
-import org.odftoolkit.simple.utils.ResourceUtilities;
-import sun.misc.BASE64Encoder;
-
-public class SectionTest {
-
-	@Test
-	public void testCopyPasteResource() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("ImageSection");
-			String newName = doc.appendSection(theSec, false).getName();
-			doc.save(ResourceUtilities.newTestOutputFile("NewSection.odt"));
-
-			TextDocument newDoc = TextDocument
-					.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSection.odt"));
-			theSec = newDoc.getSectionByName("ImageSection");
-			Section newSec = newDoc.getSectionByName(newName);
-
-			XPath xpath = newDoc.getContentDom().getXPath();
-			DrawImageElement oldImage = (DrawImageElement) xpath.evaluate(".//draw:image", theSec.getOdfElement(),
-					XPathConstants.NODE);
-			DrawImageElement newImage = (DrawImageElement) xpath.evaluate(".//draw:image", newSec.getOdfElement(),
-					XPathConstants.NODE);
-			Assert.assertEquals(oldImage.getXlinkHrefAttribute(), newImage.getXlinkHrefAttribute());
-
-			OdfPackage packageDocument = newDoc.getPackage();
-			String imagePathPrefix = "Pictures/";
-			int count = 0;
-			Iterator<String> filePaths = packageDocument.getFilePaths().iterator();
-			while (filePaths.hasNext()) {
-				String path = filePaths.next();
-				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
-					count++;
-				if (count > 2)
-					break;
-			}
-			Assert.assertEquals(1, count);
-			// ---------resource copied------
-			doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			theSec = doc.getSectionByName("ImageSection");
-			newName = doc.appendSection(theSec, true).getName();
-			doc.save(ResourceUtilities.newTestOutputFile("NewSection1.odt"));
-
-			newDoc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSection1.odt"));
-			theSec = newDoc.getSectionByName("ImageSection");
-			newSec = newDoc.getSectionByName(newName);
-
-			xpath = newDoc.getContentDom().getXPath();
-			oldImage = (DrawImageElement) xpath.evaluate(".//draw:image", theSec.getOdfElement(), XPathConstants.NODE);
-			newImage = (DrawImageElement) xpath.evaluate(".//draw:image", newSec.getOdfElement(), XPathConstants.NODE);
-			if (oldImage.getXlinkHrefAttribute().equals(newImage.getXlinkHrefAttribute()))
-				Assert.fail();
-
-			packageDocument = newDoc.getPackage();
-			count = 0;
-			filePaths = packageDocument.getFilePaths().iterator();
-			while (filePaths.hasNext()) {
-				String path = filePaths.next();
-				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
-					count++;
-				if (count > 2)
-					break;
-			}
-			Assert.assertEquals(2, count);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testForeignCopyPaste() {
-		try {
-			TextDocument newDoc = TextDocument.newTextDocument();
-
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Iterator<Section> sections = doc.getSectionIterator();
-
-			int count = 0;
-			while (sections.hasNext()) {
-				Section aSection = sections.next();
-				count++;
-				newDoc.newParagraph("----Start of " + aSection.getName() + "---------");
-				newDoc.appendSection(aSection, false);
-				newDoc.newParagraph("----End of " + aSection.getName() + "---------");
-				newDoc.newParagraph();
-				newDoc.newParagraph();
-				newDoc.newParagraph();
-			}
-			newDoc.save(ResourceUtilities.newTestOutputFile("NewNewSections.odt"));
-
-			newDoc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewNewSections.odt"));
-			sections = newDoc.getSectionIterator();
-			int i = 0;
-			while (sections.hasNext()) {
-				sections.next();
-				i++;
-			}
-			// an embed section is counted two times
-			Assert.assertEquals(count + 1, i);
-
-			OdfPackage packageDocument = newDoc.getPackage();
-			String imagePathPrefix = "Pictures/";
-			count = 0;
-			Iterator<String> filePaths = packageDocument.getFilePaths().iterator();
-			while (filePaths.hasNext()) {
-				String path = filePaths.next();
-				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
-					count++;
-				if (count > 2)
-					break;
-			}
-			Assert.assertEquals(1, count);
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testCopyPasteAll() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Iterator<Section> sections = doc.getSectionIterator();
-
-			int count = 0;
-			while (sections.hasNext()) {
-				Section aSection = sections.next();
-				count++;
-				doc.newParagraph("----Start of " + aSection.getName() + "---------");
-				doc.appendSection(aSection, false);
-				doc.newParagraph("----End of " + aSection.getName() + "---------");
-				doc.newParagraph();
-				doc.newParagraph();
-				doc.newParagraph();
-			}
-			doc.save(ResourceUtilities.newTestOutputFile("NewSections.odt"));
-
-			doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSections.odt"));
-			sections = doc.getSectionIterator();
-			int i = 0;
-			while (sections.hasNext()) {
-				sections.next();
-				i++;
-			}
-			// an embed section is counted two times
-			Assert.assertEquals(count * 2 + 1, i);
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testAppendNewSection() {
-		try {
-			TextDocument doc = TextDocument.newTextDocument();
-			doc.addParagraph("Paragraph1");
-			Section section = doc.appendSection("Section1");
-			section.addParagraph("Here's a section.");
-			Assert.assertNotNull(section);
-			Assert.assertEquals(section.getName(), "Section1");
-			Assert.assertEquals(section.getParagraphByIndex(0, true)
-					.getTextContent(), "Here's a section.");
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	private class MyDigestGenerator implements ProtectionKeyDigestProvider {
-
-//		@Override
-		public String generateHashKey(String passwd) {
-
-			String hashKey = null;
-			if (passwd != null && passwd.length() > 0) {
-				MessageDigest md;
-				try {
-					byte[] pwd = passwd.getBytes();
-					md = MessageDigest.getInstance("MD5");
-					byte[] byteCode = md.digest(pwd);
-					BASE64Encoder encoder = new BASE64Encoder();
-					hashKey = encoder.encode(byteCode);
-				} catch (NoSuchAlgorithmException e) {
-					Logger.getLogger(Section.class.getName(),
-							"Fail to initiate the digest method.");
-				}
-			}
-			return hashKey;
-
-		}
-
-//		@Override
-		public String getProtectionKeyDigestAlgorithm() {
-			return "http://www.w3.org/2000/09/#md5";
-		}
-
-	}
-
-	@Test
-	public void testSetProtectionKeyDigestProvider() {
-		try {
-			TextDocument doc = TextDocument.newTextDocument();
-			Section section = doc.appendSection("Section1");
-			section.addParagraph("Section 1");
-			Assert.assertNotNull(section);
-
-			section.setProtectionKeyDigestProvider(new MyDigestGenerator());
-			section.setProtectedWithPassword("12345");
-			Assert.assertEquals(true, section.isProtected());
-			Assert.assertEquals("gnzLDuqKcGxMNKFokfhOew==", section
-					.getProtectedPassword());
-			Assert.assertEquals("http://www.w3.org/2000/09/#md5", section
-					.getProtectionKeyDigestAlgorithm());
-
-			section.setProtectionKeyDigestProvider(null);
-			section.setProtectedWithPassword("12345");
-			Assert.assertEquals(true, section.isProtected());
-			Assert.assertEquals("LyQWujvPXbGDYsrSDKkAiVFavg8=", section
-					.getProtectedPassword());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testSetProtectSection() {
-		try {
-			TextDocument doc = TextDocument.newTextDocument();
-			doc.addParagraph("Paragraph1");
-			String secName = "Section1";
-			Section section = doc.appendSection(secName);
-			Assert.assertNotNull(section);
-
-			section.setProtectedWithPassword("12345");
-			Assert.assertEquals(true, section.isProtected());
-			Assert.assertEquals("LyQWujvPXbGDYsrSDKkAiVFavg8=", section
-					.getProtectedPassword());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-
-			section.setProtectedWithPassword("");
-			Assert.assertEquals(true, section.isProtected());
-			Assert.assertNull(section.getProtectedPassword());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-
-			section.setProtected(false);
-			Assert.assertEquals(false, section.isProtected());
-			Assert.assertNull(section.getProtectedPassword());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-
-			section.setProtectedWithPassword(null);
-			Assert.assertEquals(false, section.isProtected());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-			Assert.assertNull(section.getProtectedPassword());
-
-			section.setProtected(true);
-			Assert.assertEquals(true, section.isProtected());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-			Assert.assertNull(section.getProtectedPassword());
-
-			section.setProtectedWithPassword("12345");
-			Assert.assertEquals(true, section.isProtected());
-			Assert.assertEquals("LyQWujvPXbGDYsrSDKkAiVFavg8=", section
-					.getProtectedPassword());
-			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
-					section.getProtectionKeyDigestAlgorithm());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testRemoveSection() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("Section11");
-			Assert.assertNull(theSec);
-			Iterator<Section> sections = doc.getSectionIterator();
-			int count = 0;
-			while (sections.hasNext()) {
-				sections.next();
-				count++;
-			}
-
-			theSec = doc.getSectionByName("Section1");
-			theSec.remove();
-			sections = doc.getSectionIterator();
-			int i = 0;
-			while (sections.hasNext()) {
-				sections.next();
-				i++;
-			}
-			Assert.assertEquals(count - 1, i);
-
-			theSec = doc.getSectionByName("ImageSection");
-			theSec.remove();
-			OdfPackage packageDocument = doc.getPackage();
-			String imagePathPrefix = "Pictures/";
-			count = 0;
-			Iterator<String> filePaths = packageDocument.getFilePaths().iterator();
-			while (filePaths.hasNext()) {
-				String path = filePaths.next();
-				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
-					count++;
-				if (count > 1)
-					break;
-			}
-			Assert.assertEquals(0, count);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testSetGetName() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("ImageSection");
-			theSec.setName("ImageSection_NewName");
-			doc.save(ResourceUtilities.newTestOutputFile("NewSection.odt"));
-
-			TextDocument newDoc = TextDocument
-					.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSection.odt"));
-			theSec = newDoc.getSectionByName("ImageSection");
-			Assert.assertNull(theSec);
-			theSec = newDoc.getSectionByName("ImageSection_NewName");
-			Assert.assertNotNull(theSec);
-			Assert.assertEquals("ImageSection_NewName", theSec.getName());
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testAddParagraph() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("ImageSection");
-
-			Paragraph para = theSec.addParagraph("paragraph");
-			String paracontent = para.getTextContent();
-			Assert.assertEquals("paragraph", paracontent);
-
-			OdfElement odfEle = theSec.getParagraphContainerElement();
-			Assert.assertEquals("paragraph", odfEle.getLastChild().getTextContent());
-
-			boolean flag = theSec.removeParagraph(para);
-			if(flag){
-				OdfElement odfEle1 = theSec.getParagraphContainerElement();
-				Assert.assertTrue(odfEle1.getLastChild().getTextContent() != "paragraph");
-			}
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-
-	@Test
-	public void testGetParagraphIterator() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("ImageSection");
-
-			Paragraph para = theSec.addParagraph("paragraph");
-			String paracontent = para.getTextContent();
-			Assert.assertEquals("paragraph", paracontent);
-
-			boolean flag = false;
-			Iterator<Paragraph> iter = theSec.getParagraphIterator();
-			while(iter.hasNext()){
-				Paragraph parai = iter.next();
-				if("paragraph".equals(parai.getTextContent()))
-						flag = true;
-			}
-
-			Assert.assertTrue(flag);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-
-	@Test
-	public void testGetParagraphByIndex() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("ImageSection");
-
-			Paragraph para = theSec.addParagraph("paragraph");
-			String paracontent = para.getTextContent();
-			Assert.assertEquals("paragraph", paracontent);
-
-			Paragraph para1 = theSec.getParagraphByIndex(2, true);
-			Assert.assertEquals("paragraph", para1.getTextContent());
-
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-
-	@Test
-	public void testGetParagraphByReverseIndex() {
-		try {
-			TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-			Section theSec = doc.getSectionByName("ImageSection");
-			Section theSec2 = doc.getSectionByName("ImageSection");
-
-			Paragraph para = theSec.addParagraph("paragraph");
-			String paracontent = para.getTextContent();
-			Assert.assertEquals("paragraph", paracontent);
-
-			Paragraph para1 = theSec.getParagraphByReverseIndex(0, true);
-			Assert.assertEquals("paragraph", para1.getTextContent());
-
-			Paragraph para2 = theSec.getParagraphByIndex(2, true);
-			Assert.assertEquals("paragraph", para2.getTextContent());
-
-			boolean flag = theSec.equals(para);
-			Assert.assertTrue(!flag);
-			flag = theSec.equals(theSec2);
-			Assert.assertTrue(flag);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testAddTable() {
-		try {
-			TextDocument doc = TextDocument.newTextDocument();
-			Section theSec = doc.appendSection("TableSection");
-
-			Table table1 = theSec.addTable();
-			table1.getCellByPosition("A1").addParagraph("A1");
-			OdfElement odfEle = theSec.getTableContainerElement();
-			Assert.assertEquals("A1", Table.getInstance(
-					(TableTableElement) odfEle.getLastChild())
-					.getCellByPosition("A1").getDisplayText());
-
-			Table table2 = theSec.addTable(3, 3);
-			table2.getCellByPosition("C3").addParagraph("C3");
-			odfEle = theSec.getTableContainerElement();
-			Assert.assertEquals("C3", Table.getInstance(
-					(TableTableElement) odfEle.getLastChild())
-					.getCellByPosition("C3").getDisplayText());
-
-			table1.remove();
-			table2.remove();
-			OdfElement odfEle1 = theSec.getTableContainerElement();
-			Assert.assertNull(odfEle1.getLastChild());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testGetTableByName() {
-		try {
-			TextDocument doc = TextDocument.newTextDocument();
-			Section sect = doc.appendSection("TableSeciton");
-			sect.addTable(2, 2);
-			sect.addTable(2, 2);
-			sect.addTable(5, 5).getCellByPosition("E5").setBooleanValue(true);
-			Cell cell = sect.getTableByName("Table3").getCellByPosition(4, 4);
-			Assert.assertNotNull(cell);
-			Assert.assertTrue(cell.getBooleanValue());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			Assert.fail();
-		}
-	}
-
-	@Test
-	public void testAddRemoveList() {
-
-		try {
-			TextDocument doc = TextDocument.newTextDocument();
-			Section sect = doc.appendSection("List Section");
-
-			ListDecorator numberDecorator = new NumberDecorator(doc);
-			ListDecorator outLineDecorator = new OutLineDecorator(doc);
-			String[] subItemContents = { "sub list item 1", "sub list item 2",
-					"sub list item 3" };
-
-			List list1 = new List(sect);
-			boolean removeResult = sect.removeList(list1);
-			Assert.assertTrue(removeResult);
-
-			List list2 = new List(sect, numberDecorator);
-			list2.addItems(subItemContents);
-			Assert.assertEquals(ListDecorator.ListType.NUMBER, list2.getType());
-			removeResult = sect.removeList(list2);
-			Assert.assertTrue(removeResult);
-
-			List list3 = new List(sect, "Bullet List", null);
-			list3.addItems(subItemContents);
-			Assert.assertEquals(ListDecorator.ListType.BULLET, list3.getType());
-			removeResult = sect.removeList(list3);
-			Assert.assertTrue(removeResult);
-
-			List list4 = sect.addList();
-			removeResult = sect.removeList(list4);
-			Assert.assertTrue(removeResult);
-
-			List list5 = sect.addList(outLineDecorator);
-			list5.addItems(subItemContents);
-			Assert.assertEquals(ListDecorator.ListType.NUMBER, list5.getType());
-			removeResult = sect.removeList(list5);
-			Assert.assertTrue(removeResult);
-		} catch (Exception e) {
-			Logger.getLogger(ListTest.class.getName()).log(Level.SEVERE, null,
-					e);
-			Assert.fail(e.getMessage());
-		}
-	}
-
-	@Test
-	public void testIterateList() {
-		try {
-
-			TextDocument doc = TextDocument.newTextDocument();
-			Section sect = doc.appendSection("List Section");
-
-			ListDecorator numberDecorator = new NumberDecorator(doc);
-			ListDecorator outLineDecorator = new OutLineDecorator(doc);
-			String[] subItemContents = { "sub list item 1", "sub list item 2",
-					"sub list item 3" };
-
-			// create 2 lists
-			new List(sect, numberDecorator);
-			sect.addList().addItems(subItemContents);
-
-			Iterator<List> listIterator = sect.getListIterator();
-			int i = 0;
-			while (listIterator.hasNext()) {
-				listIterator.next();
-				i++;
-			}
-			Assert.assertEquals(2, i);
-
-			// add 2 new lists.
-			sect.addList(outLineDecorator);
-			List list = sect.addList();
-			listIterator = sect.getListIterator();
-			i = 0;
-			while (listIterator.hasNext()) {
-				listIterator.next();
-				i++;
-			}
-			Assert.assertEquals(4, i);
-
-			// remove 1 list.
-			sect.removeList(list);
-			listIterator = sect.getListIterator();
-			i = 0;
-			while (listIterator.hasNext()) {
-				listIterator.next();
-				i++;
-			}
-			Assert.assertEquals(3, i);
-
-			// remove all of the lists.
-			sect.clearList();
-			listIterator = sect.getListIterator();
-			i = 0;
-			while (listIterator.hasNext()) {
-				listIterator.next();
-				i++;
-			}
-			Assert.assertEquals(0, i);
-
-		} catch (Exception e) {
-			Logger.getLogger(ListTest.class.getName()).log(Level.SEVERE, null,
-					e);
-			Assert.fail(e.getMessage());
-		}
-	}
-
-    @Test
-    public void testGetEmbeddedSectionByName() {
-        try {
-            TextDocument doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
-            Section sectOut = doc.getSectionByName("InnerSection");
-            Section sectEmbedded = sectOut.getEmbeddedSectionByName("EmbedSection");
-            Assert.assertEquals(true, sectEmbedded != null);
-        } catch (Exception e) {
-            Logger.getLogger(ListTest.class.getName()).log(Level.SEVERE, "Problem with section test:", e);
-            Assert.fail();
-        }
-    }
-}
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+ */
+
+package org.odftoolkit.simple.text;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import junit.framework.Assert;
+import org.junit.Test;
+import org.odftoolkit.odfdom.dom.OdfDocumentNamespace;
+import org.odftoolkit.odfdom.dom.element.draw.DrawImageElement;
+import org.odftoolkit.odfdom.dom.element.table.TableTableElement;
+import org.odftoolkit.odfdom.pkg.OdfElement;
+import org.odftoolkit.odfdom.pkg.OdfPackage;
+import org.odftoolkit.simple.TextDocument;
+import org.odftoolkit.simple.table.Cell;
+import org.odftoolkit.simple.table.Table;
+import org.odftoolkit.simple.text.list.List;
+import org.odftoolkit.simple.text.list.ListDecorator;
+import org.odftoolkit.simple.text.list.ListTest;
+import org.odftoolkit.simple.text.list.NumberDecorator;
+import org.odftoolkit.simple.text.list.OutLineDecorator;
+import org.odftoolkit.simple.utils.ResourceUtilities;
+import org.w3c.dom.Attr;
+import org.w3c.dom.NodeList;
+import sun.misc.BASE64Encoder;
+
+public class SectionTest {
+
+	@Test
+	public void testCopyPasteResource() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("ImageSection");
+			String newName = doc.appendSection(theSec, false).getName();
+			doc.save(ResourceUtilities.newTestOutputFile("NewSection.odt"));
+
+			TextDocument newDoc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSection.odt"));
+			theSec = newDoc.getSectionByName("ImageSection");
+			Section newSec = newDoc.getSectionByName(newName);
+
+			XPath xpath = newDoc.getContentDom().getXPath();
+			DrawImageElement oldImage =
+				(DrawImageElement) xpath.evaluate(".//draw:image", theSec.getOdfElement(),
+					XPathConstants.NODE);
+			DrawImageElement newImage =
+				(DrawImageElement) xpath.evaluate(".//draw:image", newSec.getOdfElement(),
+					XPathConstants.NODE);
+			Assert.assertEquals(oldImage.getXlinkHrefAttribute(), newImage.getXlinkHrefAttribute());
+
+			OdfPackage packageDocument = newDoc.getPackage();
+			String imagePathPrefix = "Pictures/";
+			int count = 0;
+			Iterator<String> filePaths = packageDocument.getFilePaths().iterator();
+			while (filePaths.hasNext()) {
+				String path = filePaths.next();
+				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
+					count++;
+				if (count > 2)
+					break;
+			}
+			Assert.assertEquals(1, count);
+			// ---------resource copied------
+			doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			theSec = doc.getSectionByName("ImageSection");
+			newName = doc.appendSection(theSec, true).getName();
+			doc.save(ResourceUtilities.newTestOutputFile("NewSection1.odt"));
+
+			newDoc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSection1.odt"));
+			theSec = newDoc.getSectionByName("ImageSection");
+			newSec = newDoc.getSectionByName(newName);
+
+			xpath = newDoc.getContentDom().getXPath();
+			oldImage =
+				(DrawImageElement) xpath.evaluate(".//draw:image", theSec.getOdfElement(),
+					XPathConstants.NODE);
+			newImage =
+				(DrawImageElement) xpath.evaluate(".//draw:image", newSec.getOdfElement(),
+					XPathConstants.NODE);
+			if (oldImage.getXlinkHrefAttribute().equals(newImage.getXlinkHrefAttribute()))
+				Assert.fail();
+
+			packageDocument = newDoc.getPackage();
+			count = 0;
+			filePaths = packageDocument.getFilePaths().iterator();
+			while (filePaths.hasNext()) {
+				String path = filePaths.next();
+				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
+					count++;
+				if (count > 2)
+					break;
+			}
+			Assert.assertEquals(2, count);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testForeignCopyPaste() {
+		try {
+			TextDocument newDoc = TextDocument.newTextDocument();
+
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Iterator<Section> sections = doc.getSectionIterator();
+
+			int count = 0;
+			while (sections.hasNext()) {
+				Section aSection = sections.next();
+				count++;
+				newDoc.newParagraph("----Start of " + aSection.getName() + "---------");
+				newDoc.appendSection(aSection, false);
+				newDoc.newParagraph("----End of " + aSection.getName() + "---------");
+				newDoc.newParagraph();
+				newDoc.newParagraph();
+				newDoc.newParagraph();
+			}
+			newDoc.save(ResourceUtilities.newTestOutputFile("NewNewSections.odt"));
+
+			newDoc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewNewSections.odt"));
+			sections = newDoc.getSectionIterator();
+			int i = 0;
+			while (sections.hasNext()) {
+				sections.next();
+				i++;
+			}
+			// an embed section is counted two times
+			Assert.assertEquals(count + 1, i);
+
+			OdfPackage packageDocument = newDoc.getPackage();
+			String imagePathPrefix = "Pictures/";
+			count = 0;
+			Iterator<String> filePaths = packageDocument.getFilePaths().iterator();
+			while (filePaths.hasNext()) {
+				String path = filePaths.next();
+				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
+					count++;
+				if (count > 2)
+					break;
+			}
+			Assert.assertEquals(1, count);
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testCopyPasteAll() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Iterator<Section> sections = doc.getSectionIterator();
+
+			int count = 0;
+			while (sections.hasNext()) {
+				Section aSection = sections.next();
+				count++;
+				doc.newParagraph("----Start of " + aSection.getName() + "---------");
+				doc.appendSection(aSection, false);
+				doc.newParagraph("----End of " + aSection.getName() + "---------");
+				doc.newParagraph();
+				doc.newParagraph();
+				doc.newParagraph();
+			}
+			doc.save(ResourceUtilities.newTestOutputFile("NewSections.odt"));
+
+			doc = TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSections.odt"));
+			sections = doc.getSectionIterator();
+			int i = 0;
+			while (sections.hasNext()) {
+				sections.next();
+				i++;
+			}
+			// an embed section is counted two times
+			Assert.assertEquals(count * 2 + 1, i);
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testAppendNewSection() {
+		try {
+			TextDocument doc = TextDocument.newTextDocument();
+			doc.addParagraph("Paragraph1");
+			Section section = doc.appendSection("Section1");
+			section.addParagraph("Here's a section.");
+			Assert.assertNotNull(section);
+			Assert.assertEquals(section.getName(), "Section1");
+			Assert.assertEquals(section.getParagraphByIndex(0, true).getTextContent(),
+				"Here's a section.");
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	private class MyDigestGenerator implements ProtectionKeyDigestProvider {
+
+		// @Override
+		public String generateHashKey(String passwd) {
+
+			String hashKey = null;
+			if (passwd != null && passwd.length() > 0) {
+				MessageDigest md;
+				try {
+					byte[] pwd = passwd.getBytes();
+					md = MessageDigest.getInstance("MD5");
+					byte[] byteCode = md.digest(pwd);
+					BASE64Encoder encoder = new BASE64Encoder();
+					hashKey = encoder.encode(byteCode);
+				} catch (NoSuchAlgorithmException e) {
+					Logger.getLogger(Section.class.getName(), "Fail to initiate the digest method.");
+				}
+			}
+			return hashKey;
+
+		}
+
+		// @Override
+		public String getProtectionKeyDigestAlgorithm() {
+			return "http://www.w3.org/2000/09/#md5";
+		}
+
+	}
+
+	@Test
+	public void testSetProtectionKeyDigestProvider() {
+		try {
+			TextDocument doc = TextDocument.newTextDocument();
+			Section section = doc.appendSection("Section1");
+			section.addParagraph("Section 1");
+			Assert.assertNotNull(section);
+
+			section.setProtectionKeyDigestProvider(new MyDigestGenerator());
+			section.setProtectedWithPassword("12345");
+			Assert.assertEquals(true, section.isProtected());
+			Assert.assertEquals("gnzLDuqKcGxMNKFokfhOew==", section.getProtectedPassword());
+			Assert.assertEquals("http://www.w3.org/2000/09/#md5",
+				section.getProtectionKeyDigestAlgorithm());
+
+			section.setProtectionKeyDigestProvider(null);
+			section.setProtectedWithPassword("12345");
+			Assert.assertEquals(true, section.isProtected());
+			Assert.assertEquals("LyQWujvPXbGDYsrSDKkAiVFavg8=", section.getProtectedPassword());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testSetProtectSection() {
+		try {
+			TextDocument doc = TextDocument.newTextDocument();
+			doc.addParagraph("Paragraph1");
+			String secName = "Section1";
+			Section section = doc.appendSection(secName);
+			Assert.assertNotNull(section);
+
+			section.setProtectedWithPassword("12345");
+			Assert.assertEquals(true, section.isProtected());
+			Assert.assertEquals("LyQWujvPXbGDYsrSDKkAiVFavg8=", section.getProtectedPassword());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+
+			section.setProtectedWithPassword("");
+			Assert.assertEquals(true, section.isProtected());
+			Assert.assertNull(section.getProtectedPassword());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+
+			section.setProtected(false);
+			Assert.assertEquals(false, section.isProtected());
+			Assert.assertNull(section.getProtectedPassword());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+
+			section.setProtectedWithPassword(null);
+			Assert.assertEquals(false, section.isProtected());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+			Assert.assertNull(section.getProtectedPassword());
+
+			section.setProtected(true);
+			Assert.assertEquals(true, section.isProtected());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+			Assert.assertNull(section.getProtectedPassword());
+
+			section.setProtectedWithPassword("12345");
+			Assert.assertEquals(true, section.isProtected());
+			Assert.assertEquals("LyQWujvPXbGDYsrSDKkAiVFavg8=", section.getProtectedPassword());
+			Assert.assertEquals("http://www.w3.org/2000/09/xmldsig#sha1",
+				section.getProtectionKeyDigestAlgorithm());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testRemoveSection() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("Section11");
+			Assert.assertNull(theSec);
+			Iterator<Section> sections = doc.getSectionIterator();
+			int count = 0;
+			while (sections.hasNext()) {
+				sections.next();
+				count++;
+			}
+
+			theSec = doc.getSectionByName("Section1");
+			theSec.remove();
+			sections = doc.getSectionIterator();
+			int i = 0;
+			while (sections.hasNext()) {
+				sections.next();
+				i++;
+			}
+			Assert.assertEquals(count - 1, i);
+
+			theSec = doc.getSectionByName("ImageSection");
+			theSec.remove();
+			OdfPackage packageDocument = doc.getPackage();
+			String imagePathPrefix = "Pictures/";
+			count = 0;
+			Iterator<String> filePaths = packageDocument.getFilePaths().iterator();
+			while (filePaths.hasNext()) {
+				String path = filePaths.next();
+				if (path.startsWith(imagePathPrefix) && path.length() > imagePathPrefix.length())
+					count++;
+				if (count > 1)
+					break;
+			}
+			Assert.assertEquals(0, count);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testSetGetName() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("ImageSection");
+			theSec.setName("ImageSection_NewName");
+			doc.save(ResourceUtilities.newTestOutputFile("NewSection.odt"));
+
+			TextDocument newDoc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("NewSection.odt"));
+			theSec = newDoc.getSectionByName("ImageSection");
+			Assert.assertNull(theSec);
+			theSec = newDoc.getSectionByName("ImageSection_NewName");
+			Assert.assertNotNull(theSec);
+			Assert.assertEquals("ImageSection_NewName", theSec.getName());
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testAddParagraph() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("ImageSection");
+
+			Paragraph para = theSec.addParagraph("paragraph");
+			String paracontent = para.getTextContent();
+			Assert.assertEquals("paragraph", paracontent);
+
+			OdfElement odfEle = theSec.getParagraphContainerElement();
+			Assert.assertEquals("paragraph", odfEle.getLastChild().getTextContent());
+
+			boolean flag = theSec.removeParagraph(para);
+			if (flag) {
+				OdfElement odfEle1 = theSec.getParagraphContainerElement();
+				Assert.assertTrue(odfEle1.getLastChild().getTextContent() != "paragraph");
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testGetParagraphIterator() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("ImageSection");
+
+			Paragraph para = theSec.addParagraph("paragraph");
+			String paracontent = para.getTextContent();
+			Assert.assertEquals("paragraph", paracontent);
+
+			boolean flag = false;
+			Iterator<Paragraph> iter = theSec.getParagraphIterator();
+			while (iter.hasNext()) {
+				Paragraph parai = iter.next();
+				if ("paragraph".equals(parai.getTextContent()))
+					flag = true;
+			}
+
+			Assert.assertTrue(flag);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testGetParagraphByIndex() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("ImageSection");
+
+			Paragraph para = theSec.addParagraph("paragraph");
+			String paracontent = para.getTextContent();
+			Assert.assertEquals("paragraph", paracontent);
+
+			Paragraph para1 = theSec.getParagraphByIndex(2, true);
+			Assert.assertEquals("paragraph", para1.getTextContent());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testGetParagraphByReverseIndex() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section theSec = doc.getSectionByName("ImageSection");
+			Section theSec2 = doc.getSectionByName("ImageSection");
+
+			Paragraph para = theSec.addParagraph("paragraph");
+			String paracontent = para.getTextContent();
+			Assert.assertEquals("paragraph", paracontent);
+
+			Paragraph para1 = theSec.getParagraphByReverseIndex(0, true);
+			Assert.assertEquals("paragraph", para1.getTextContent());
+
+			Paragraph para2 = theSec.getParagraphByIndex(2, true);
+			Assert.assertEquals("paragraph", para2.getTextContent());
+
+			boolean flag = theSec.equals(para);
+			Assert.assertTrue(!flag);
+			flag = theSec.equals(theSec2);
+			Assert.assertTrue(flag);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testAddTable() {
+		try {
+			TextDocument doc = TextDocument.newTextDocument();
+			Section theSec = doc.appendSection("TableSection");
+
+			Table table1 = theSec.addTable();
+			table1.getCellByPosition("A1").addParagraph("A1");
+			OdfElement odfEle = theSec.getTableContainerElement();
+			Assert.assertEquals("A1", Table.getInstance((TableTableElement) odfEle.getLastChild())
+				.getCellByPosition("A1").getDisplayText());
+
+			Table table2 = theSec.addTable(3, 3);
+			table2.getCellByPosition("C3").addParagraph("C3");
+			odfEle = theSec.getTableContainerElement();
+			Assert.assertEquals("C3", Table.getInstance((TableTableElement) odfEle.getLastChild())
+				.getCellByPosition("C3").getDisplayText());
+
+			table1.remove();
+			table2.remove();
+			OdfElement odfEle1 = theSec.getTableContainerElement();
+			Assert.assertNull(odfEle1.getLastChild());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testGetTableByName() {
+		try {
+			TextDocument doc = TextDocument.newTextDocument();
+			Section sect = doc.appendSection("TableSeciton");
+			sect.addTable(2, 2);
+			sect.addTable(2, 2);
+			sect.addTable(5, 5).getCellByPosition("E5").setBooleanValue(true);
+			Cell cell = sect.getTableByName("Table3").getCellByPosition(4, 4);
+			Assert.assertNotNull(cell);
+			Assert.assertTrue(cell.getBooleanValue());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+	@Test
+	public void testAddRemoveList() {
+
+		try {
+			TextDocument doc = TextDocument.newTextDocument();
+			Section sect = doc.appendSection("List Section");
+
+			ListDecorator numberDecorator = new NumberDecorator(doc);
+			ListDecorator outLineDecorator = new OutLineDecorator(doc);
+			String[] subItemContents = { "sub list item 1", "sub list item 2", "sub list item 3" };
+
+			List list1 = new List(sect);
+			boolean removeResult = sect.removeList(list1);
+			Assert.assertTrue(removeResult);
+
+			List list2 = new List(sect, numberDecorator);
+			list2.addItems(subItemContents);
+			Assert.assertEquals(ListDecorator.ListType.NUMBER, list2.getType());
+			removeResult = sect.removeList(list2);
+			Assert.assertTrue(removeResult);
+
+			List list3 = new List(sect, "Bullet List", null);
+			list3.addItems(subItemContents);
+			Assert.assertEquals(ListDecorator.ListType.BULLET, list3.getType());
+			removeResult = sect.removeList(list3);
+			Assert.assertTrue(removeResult);
+
+			List list4 = sect.addList();
+			removeResult = sect.removeList(list4);
+			Assert.assertTrue(removeResult);
+
+			List list5 = sect.addList(outLineDecorator);
+			list5.addItems(subItemContents);
+			Assert.assertEquals(ListDecorator.ListType.NUMBER, list5.getType());
+			removeResult = sect.removeList(list5);
+			Assert.assertTrue(removeResult);
+		} catch (Exception e) {
+			Logger.getLogger(ListTest.class.getName()).log(Level.SEVERE, null, e);
+			Assert.fail(e.getMessage());
+		}
+	}
+
+	@Test
+	public void testIterateList() {
+		try {
+
+			TextDocument doc = TextDocument.newTextDocument();
+			Section sect = doc.appendSection("List Section");
+
+			ListDecorator numberDecorator = new NumberDecorator(doc);
+			ListDecorator outLineDecorator = new OutLineDecorator(doc);
+			String[] subItemContents = { "sub list item 1", "sub list item 2", "sub list item 3" };
+
+			// create 2 lists
+			new List(sect, numberDecorator);
+			sect.addList().addItems(subItemContents);
+
+			Iterator<List> listIterator = sect.getListIterator();
+			int i = 0;
+			while (listIterator.hasNext()) {
+				listIterator.next();
+				i++;
+			}
+			Assert.assertEquals(2, i);
+
+			// add 2 new lists.
+			sect.addList(outLineDecorator);
+			List list = sect.addList();
+			listIterator = sect.getListIterator();
+			i = 0;
+			while (listIterator.hasNext()) {
+				listIterator.next();
+				i++;
+			}
+			Assert.assertEquals(4, i);
+
+			// remove 1 list.
+			sect.removeList(list);
+			listIterator = sect.getListIterator();
+			i = 0;
+			while (listIterator.hasNext()) {
+				listIterator.next();
+				i++;
+			}
+			Assert.assertEquals(3, i);
+
+			// remove all of the lists.
+			sect.clearList();
+			listIterator = sect.getListIterator();
+			i = 0;
+			while (listIterator.hasNext()) {
+				listIterator.next();
+				i++;
+			}
+			Assert.assertEquals(0, i);
+
+		} catch (Exception e) {
+			Logger.getLogger(ListTest.class.getName()).log(Level.SEVERE, null, e);
+			Assert.fail(e.getMessage());
+		}
+	}
+
+	@Test
+	public void testGetEmbeddedSectionByName() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("Sections.odt"));
+			Section sectOut = doc.getSectionByName("InnerSection");
+			Section sectEmbedded = sectOut.getEmbeddedSectionByName("EmbedSection");
+			Assert.assertEquals(true, sectEmbedded != null);
+		} catch (Exception e) {
+			Logger.getLogger(ListTest.class.getName()).log(Level.SEVERE, "Problem with section test:", e);
+			Assert.fail();
+		}
+	}
+
+	/**
+	 * tests the Function 'updateXMLIds' indirectly by calling
+	 * TextDocument.appendSection() The function updateXMLIds has to change the
+	 * xml:id of a list element and its reference text:continue-list in the same
+	 * way.
+	 *
+	 * The SectionContinuedList.odt includes one section. This section includes
+	 * three lists, the third list continues the first one.
+	 *
+	 *
+	 * In this test we copy the section and remove the source section. Then we
+	 * investigate the xml:id and text:continue-list attribute of the copied
+	 * section. The attribute values must be changed in the same way.
+	 *
+	 */
+	@Test
+	public void testUpdateXMLIds() {
+		try {
+			TextDocument doc =
+				TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("SectionContinuedList.odt"));
+			Iterator<Section> sections = doc.getSectionIterator();
+
+			Section secCopy = null;
+			while (sections.hasNext()) {
+				Section aSection = sections.next();
+				secCopy = doc.appendSection(aSection, false);
+				aSection.remove();
+				break;
+			}
+
+			// Check if the id of the continued List is changed in the same way
+			// like the id of the source.
+
+			OdfElement odfEle = secCopy.getOdfElement();
+			String xpathValue = "//*[@xml:id]";
+			XPath xpath = doc.getContentDom().getXPath();
+			NodeList childList = (NodeList) xpath.evaluate(xpathValue, odfEle, XPathConstants.NODESET);
+			OdfElement ele = (OdfElement) childList.item(0);
+			Attr attriXmlId = ele.getAttributeNodeNS(OdfDocumentNamespace.XML.getUri(), "id");
+
+			String xpathValueRef = "//*[@text:continue-list]";
+			NodeList refIdList = (NodeList) xpath.evaluate(xpathValueRef, odfEle, XPathConstants.NODESET);
+			ele = (OdfElement) refIdList.item(0);
+			Attr attriContinueId =
+				ele.getAttributeNodeNS(OdfDocumentNamespace.TEXT.getUri(), "continue-list");
+
+			// Both attibute values must be the same
+			Assert.assertEquals(attriContinueId.getValue(), attriXmlId.getValue());
+            doc.save(ResourceUtilities.newTestOutputFile("SectionContinuedList_updatedXmlId.odt"));
+		} catch (Exception e) {
+			e.printStackTrace();
+			Assert.fail();
+		}
+	}
+
+}

Added: incubator/odf/trunk/simple/src/test/resources/SectionContinuedList.odt
URL: http://svn.apache.org/viewvc/incubator/odf/trunk/simple/src/test/resources/SectionContinuedList.odt?rev=1747358&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/odf/trunk/simple/src/test/resources/SectionContinuedList.odt
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream