diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java b/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java
index 25521fbde..621984ce6 100644
--- a/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java
+++ b/src/scratchpad/src/org/apache/poi/hslf/model/Slide.java
@@ -143,7 +143,33 @@ public class Slide extends Sheet
}
- // Accesser methods follow
+ // Complex Accesser methods follow
+
+ /**
+ * Return title of this slide or null
if the slide does not have title.
+ *
+ * The title is a run of text of type TextHeaderAtom.CENTER_TITLE_TYPE
or
+ * TextHeaderAtom.TITLE_TYPE
+ *
+ *
+ * @see TextHeaderAtom
+ *
+ * @return title of this slide
+ */
+ public String getTitle(){
+ TextRun[] txt = getTextRuns();
+ for (int i = 0; i < txt.length; i++) {
+ int type = txt[i].getRunType();
+ if (type == TextHeaderAtom.CENTER_TITLE_TYPE ||
+ type == TextHeaderAtom.TITLE_TYPE ){
+ String title = txt[i].getText();
+ return title;
+ }
+ }
+ return null;
+ }
+
+ // Simple Accesser methods follow
/**
* Returns an array of all the TextRuns found
diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestSlideOrdering.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestSlideOrdering.java
index 0406178c0..515f65ebd 100644
--- a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestSlideOrdering.java
+++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestSlideOrdering.java
@@ -85,4 +85,74 @@ public class TestSlideOrdering extends TestCase {
assertEquals(firstTRs[1], s2.getTextRuns()[0].getText());
assertEquals(firstTRs[2], s3.getTextRuns()[0].getText());
}
+
+ /**
+ * Assert that the order of slides is correct.
+ *
+ * @param filename file name of the slide show to assert
+ * @param titles array of reference slide titles
+ */
+ protected void assertSlideOrdering(String filename, String[] titles) throws Exception {
+ SlideShow ppt = new SlideShow(new HSLFSlideShow(filename));
+ Slide[] slide = ppt.getSlides();
+
+ assertEquals(titles.length, slide.length);
+ for (int i = 0; i < slide.length; i++) {
+ String title = slide[i].getTitle();
+ assertEquals("Wrong slide title in " + filename, titles[i], title);
+ }
+ }
+
+ public void testTitles() throws Exception{
+ String dirname = System.getProperty("HSLF.testdata.path");
+
+ assertSlideOrdering(dirname + "/basic_test_ppt_file.ppt",
+ new String[]{
+ "This is a test title",
+ "This is the title on page 2"
+ });
+
+ assertSlideOrdering(dirname + "/incorrect_slide_order.ppt",
+ new String[]{
+ "Slide 1",
+ "Slide 2",
+ "Slide 3"
+ });
+
+ assertSlideOrdering(dirname + "/next_test_ppt_file.ppt",
+ new String[]{
+ "This is a test title",
+ "This is the title on page 2"
+ });
+String a = "’";
+System.err.println((int)(a.toCharArray()[0]));
+
+ assertSlideOrdering(dirname + "/Single_Coloured_Page.ppt",
+ new String[]{
+ "This is a title, it" + (char)0x2019 +"s in black"
+ });
+
+ assertSlideOrdering(dirname + "/Single_Coloured_Page_With_Fonts_and_Alignments.ppt",
+ new String[]{
+ "This is a title, it"+ (char)0x2019 +"s in black"
+ });
+
+ assertSlideOrdering(dirname + "/ParagraphStylesShorterThanCharStyles.ppt",
+ new String[]{
+ "ROMANCE: AN ANALYSIS",
+ "AGENDA",
+ "You are an important supplier of various items that I need",
+ (char)0x0B + "Although The Psycho set back my relationship process, recovery is luckily enough under way",
+ "Since the time that we seriously go out together, you rank highly among existing relationships",
+ "Although our personal interests are mostly compatible, the greatest gap exists in Sex and Shopping",
+ "Your physical characteristics are strong when compared with your competition",
+ "The combination of your high physical appearance and personality rank you highly, although your sister is also a top prospect",
+ "When people found out that we were going out, their responses have been mixed",
+ "The benchmark of relationship lifecycles, suggests that we are on schedule",
+ "In summary we can say that we are on the right track, but we must remain aware of possible roadblocks ",
+ "THE ANSWER",
+ "Unfortunately a huge disconnect exists between my needs and your existing service",
+ "SUMMARY",
+ });
+ }
}