sw/qa/extras/ooxmltok/data/n652364.docx     |binary
 sw/qa/extras/ooxmltok/data/n750255.docx     |binary
 sw/qa/extras/ooxmltok/ooxmltok.cxx          |   88 +++++++++++++++++++++++++++-
 sw/qa/extras/ww8tok/data/n652364.doc        |binary
 sw/qa/extras/ww8tok/data/n750255.doc        |binary
 sw/qa/extras/ww8tok/ww8tok.cxx              |   82 ++++++++++++++++++++++++++
 sw/source/filter/ww8/ww8par.cxx             |    6 +
 writerfilter/source/dmapper/PropertyMap.cxx |   18 +++++
 8 files changed, 189 insertions(+), 5 deletions(-)

New commits:
commit fe7a4aad76c051bc46ae46b175fb182b6e7e3f89
Author: Luboš Luňák <l.lu...@suse.cz>
Date:   Thu May 24 17:58:27 2012 +0200

    testcases for bnc#652364 and bnc#750255 for .docx too
    
    Change-Id: I4a98f4df6fde3f52b099fa627baa861f496bb452

diff --git a/sw/qa/extras/ooxmltok/data/n652364.docx 
b/sw/qa/extras/ooxmltok/data/n652364.docx
new file mode 100644
index 0000000..0845509
Binary files /dev/null and b/sw/qa/extras/ooxmltok/data/n652364.docx differ
diff --git a/sw/qa/extras/ooxmltok/data/n750255.docx 
b/sw/qa/extras/ooxmltok/data/n750255.docx
new file mode 100644
index 0000000..a0c7370
Binary files /dev/null and b/sw/qa/extras/ooxmltok/data/n750255.docx differ
diff --git a/sw/qa/extras/ooxmltok/ooxmltok.cxx 
b/sw/qa/extras/ooxmltok/ooxmltok.cxx
index abd1a2d..fb5e3d2 100644
--- a/sw/qa/extras/ooxmltok/ooxmltok.cxx
+++ b/sw/qa/extras/ooxmltok/ooxmltok.cxx
@@ -59,6 +59,8 @@ public:
     void testN705956_1();
     void testN705956_2();
     void testN747461();
+    void testN750255();
+    void testN652364();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -72,6 +74,8 @@ public:
     CPPUNIT_TEST(testN705956_1);
     CPPUNIT_TEST(testN705956_2);
     CPPUNIT_TEST(testN747461);
+    CPPUNIT_TEST(testN750255);
+    CPPUNIT_TEST(testN652364);
 #endif
     CPPUNIT_TEST_SUITE_END();
 
@@ -321,6 +325,84 @@ after they are loaded.
     CPPUNIT_ASSERT_EQUAL( OUString( "Green" ), descr3 );
 }
 
+void Test::testN750255()
+{
+    load( "n750255.docx" );
+
+/*
+Column break without columns on the page is a page break, so check those 
paragraphs
+are on page 2 (page style 'Converted1') and page 3 (page style 'Converted2')
+enum = ThisComponent.Text.createEnumeration
+enum.nextElement
+para1 = enum.nextElement
+xray para1.String
+xray para1.PageStyleName
+para2 = enum.nextElement
+xray para2.String
+xray para2.PageStyleName
+*/
+    uno::Reference<text::XTextDocument> textDocument(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> 
paraEnumAccess(textDocument->getText(), uno::UNO_QUERY);
+    // list of paragraphs
+    uno::Reference<container::XEnumeration> paraEnum = 
paraEnumAccess->createEnumeration();
+    // go to 1st paragraph
+    (void) paraEnum->nextElement();
+    // get the 2nd and 3rd paragraph
+    uno::Reference<uno::XInterface> paragraph1(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    uno::Reference<uno::XInterface> paragraph2(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text1(paragraph1, uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text2(paragraph2, uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL( OUString( "one" ), text1->getString());
+    CPPUNIT_ASSERT_EQUAL( OUString( "two" ), text2->getString());
+    uno::Reference<beans::XPropertySet> paragraphProperties1(paragraph1, 
uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> paragraphProperties2(paragraph2, 
uno::UNO_QUERY);
+    OUString pageStyle1, pageStyle2;
+    paragraphProperties1->getPropertyValue( "PageStyleName" ) >>= pageStyle1;
+    paragraphProperties2->getPropertyValue( "PageStyleName" ) >>= pageStyle2;
+    CPPUNIT_ASSERT_EQUAL( OUString( "Converted1" ), pageStyle1 );
+    CPPUNIT_ASSERT_EQUAL( OUString( "Converted2" ), pageStyle2 );
+
+}
+
+void Test::testN652364()
+{
+    load( "n652364.docx" );
+
+/*
+Related to 750255 above, column break with columns on the page however should 
be a column break.
+enum = ThisComponent.Text.createEnumeration
+enum.nextElement
+para1 = enum.nextElement
+xray para1.String
+xray para1.PageStyleName
+enum.nextElement
+para2 = enum.nextElement
+xray para2.String
+xray para2.PageStyleName
+*/
+    uno::Reference<text::XTextDocument> textDocument(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> 
paraEnumAccess(textDocument->getText(), uno::UNO_QUERY);
+    // list of paragraphs
+    uno::Reference<container::XEnumeration> paraEnum = 
paraEnumAccess->createEnumeration();
+    // get the 2nd and 4th paragraph
+    (void) paraEnum->nextElement();
+    uno::Reference<uno::XInterface> paragraph1(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    (void) paraEnum->nextElement();
+    uno::Reference<uno::XInterface> paragraph2(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text1(paragraph1, uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text2(paragraph2, uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL( OUString( "text1" ), text1->getString());
+    CPPUNIT_ASSERT_EQUAL( OUString( "text2" ), text2->getString());
+    uno::Reference<beans::XPropertySet> paragraphProperties1(paragraph1, 
uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> paragraphProperties2(paragraph2, 
uno::UNO_QUERY);
+    OUString pageStyle1, pageStyle2;
+    paragraphProperties1->getPropertyValue( "PageStyleName" ) >>= pageStyle1;
+    paragraphProperties2->getPropertyValue( "PageStyleName" ) >>= pageStyle2;
+    // "Standard" is the style for the first page (2nd is "Converted1").
+    CPPUNIT_ASSERT_EQUAL( OUString( "Standard" ), pageStyle1 );
+    CPPUNIT_ASSERT_EQUAL( OUString( "Standard" ), pageStyle2 );
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit d4798414f2705ee987d79617ae2e76da2524e26d
Author: Luboš Luňák <l.lu...@suse.cz>
Date:   Thu May 24 17:57:41 2012 +0200

    handle column break in .docx properly too
    
    related to d8cac25ed29dbeca16161f62173a7e341793b8b6
    
    Change-Id: I56b02a450e96acec0346d6a36c29ad8e0326b0c8

diff --git a/writerfilter/source/dmapper/PropertyMap.cxx 
b/writerfilter/source/dmapper/PropertyMap.cxx
index fd58d97..58dd2b4 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -850,6 +850,24 @@ void SectionPropertyMap::CloseSectionGroup( 
DomainMapper_Impl& rDM_Impl )
         uno::Reference<beans::XPropertySet> 
xRangeProperties(lcl_GetRangeProperties(m_bIsFirstSection, rDM_Impl, 
m_xStartingRange));
         
xRangeProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_PAGE_DESC_NAME),
 uno::makeAny(m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName));
     }
+    // If the section is of type "New column" (0x01), then simply insert a 
column break.
+    // But only if there actually are columns on the page, otherwise a column 
break
+    // seems to be handled like a page break by MSO.
+    else if(m_nBreakType == 1 && m_nColumnCount > 0 )
+    {
+        uno::Reference< beans::XPropertySet > xRangeProperties;
+        if( m_xStartingRange.is() )
+        {
+            xRangeProperties = uno::Reference< beans::XPropertySet >( 
m_xStartingRange, uno::UNO_QUERY_THROW );
+        }
+        else
+        {
+            //set the start value at the beginning of the document
+            xRangeProperties = uno::Reference< beans::XPropertySet >( 
rDM_Impl.GetTextDocument()->getText()->getStart(), uno::UNO_QUERY_THROW );
+        }
+        xRangeProperties->setPropertyValue( rPropNameSupplier.GetName( 
PROP_BREAK_TYPE ),
+            uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE));
+    }
     else
     {
         //get the properties and create appropriate page styles
commit ac6c57e12fb18a8294c57f79ec979128c735ec68
Author: Luboš Luňák <l.lu...@suse.cz>
Date:   Thu May 24 16:07:06 2012 +0200

    testcases for bnc#652364 and bnc#750255
    
    Change-Id: I1be5de3e09e3eb0d52de5fb57b390c2c5fde98cb

diff --git a/sw/qa/extras/ooxmltok/ooxmltok.cxx 
b/sw/qa/extras/ooxmltok/ooxmltok.cxx
index da85c14..abd1a2d 100644
--- a/sw/qa/extras/ooxmltok/ooxmltok.cxx
+++ b/sw/qa/extras/ooxmltok/ooxmltok.cxx
@@ -234,15 +234,15 @@ xray para.PageStyleName
     (void) paraEnum->nextElement();
     // get the 2nd paragraph
     uno::Reference<uno::XInterface> paragraph(paraEnum->nextElement(), 
uno::UNO_QUERY);
-    OUString value;
     // text of the paragraph
     uno::Reference<text::XTextRange> text(paragraph, uno::UNO_QUERY);
     CPPUNIT_ASSERT_EQUAL( OUString( "TEXT1" ), text->getString());
     // we want to test the paragraph is on the first page (it was put onto 
another page without the fix),
     // use a small trick and instead of checking the page layout, check the 
page style
     uno::Reference<beans::XPropertySet> paragraphProperties(paragraph, 
uno::UNO_QUERY);
-    paragraphProperties->getPropertyValue( "PageStyleName" ) >>= value;
-    CPPUNIT_ASSERT_EQUAL( OUString( "First Page" ), value );
+    OUString pageStyle;
+    paragraphProperties->getPropertyValue( "PageStyleName" ) >>= pageStyle;
+    CPPUNIT_ASSERT_EQUAL( OUString( "First Page" ), pageStyle );
 }
 
 void Test::testN705956_1()
diff --git a/sw/qa/extras/ww8tok/data/n652364.doc 
b/sw/qa/extras/ww8tok/data/n652364.doc
new file mode 100644
index 0000000..f7a0fe0
Binary files /dev/null and b/sw/qa/extras/ww8tok/data/n652364.doc differ
diff --git a/sw/qa/extras/ww8tok/data/n750255.doc 
b/sw/qa/extras/ww8tok/data/n750255.doc
new file mode 100644
index 0000000..c0475c4
Binary files /dev/null and b/sw/qa/extras/ww8tok/data/n750255.doc differ
diff --git a/sw/qa/extras/ww8tok/ww8tok.cxx b/sw/qa/extras/ww8tok/ww8tok.cxx
index dfc047e..fc9f650 100644
--- a/sw/qa/extras/ww8tok/ww8tok.cxx
+++ b/sw/qa/extras/ww8tok/ww8tok.cxx
@@ -44,11 +44,15 @@ class Test : public SwModelTestBase
 public:
     void testN757910();
     void testN760294();
+    void testN750255();
+    void testN652364();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
     CPPUNIT_TEST(testN757910);
     CPPUNIT_TEST(testN760294);
+    CPPUNIT_TEST(testN750255);
+    CPPUNIT_TEST(testN652364);
 #endif
     CPPUNIT_TEST_SUITE_END();
 
@@ -93,6 +97,84 @@ void Test::testN760294()
     CPPUNIT_ASSERT_EQUAL(aTableBorder.TopLine.InnerLineWidth, 
aTableBorder.TopLine.LineDistance);
 }
 
+void Test::testN750255()
+{
+    load( "n750255.doc" );
+
+/*
+Column break without columns on the page is a page break, so check those 
paragraphs
+are on page 2 (page style 'Convert 1') and page 3 (page style 'Convert 2')
+enum = ThisComponent.Text.createEnumeration
+enum.nextElement
+para1 = enum.nextElement
+xray para1.String
+xray para1.PageStyleName
+para2 = enum.nextElement
+xray para2.String
+xray para2.PageStyleName
+*/
+    uno::Reference<text::XTextDocument> textDocument(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> 
paraEnumAccess(textDocument->getText(), uno::UNO_QUERY);
+    // list of paragraphs
+    uno::Reference<container::XEnumeration> paraEnum = 
paraEnumAccess->createEnumeration();
+    // go to 1st paragraph
+    (void) paraEnum->nextElement();
+    // get the 2nd and 3rd paragraph
+    uno::Reference<uno::XInterface> paragraph1(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    uno::Reference<uno::XInterface> paragraph2(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text1(paragraph1, uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text2(paragraph2, uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL( OUString( "one" ), text1->getString());
+    CPPUNIT_ASSERT_EQUAL( OUString( "two" ), text2->getString());
+    uno::Reference<beans::XPropertySet> paragraphProperties1(paragraph1, 
uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> paragraphProperties2(paragraph2, 
uno::UNO_QUERY);
+    OUString pageStyle1, pageStyle2;
+    paragraphProperties1->getPropertyValue( "PageStyleName" ) >>= pageStyle1;
+    paragraphProperties2->getPropertyValue( "PageStyleName" ) >>= pageStyle2;
+    CPPUNIT_ASSERT_EQUAL( OUString( "Convert 1" ), pageStyle1 );
+    CPPUNIT_ASSERT_EQUAL( OUString( "Convert 2" ), pageStyle2 );
+
+}
+
+void Test::testN652364()
+{
+    load( "n652364.doc" );
+
+/*
+Related to 750255 above, column break with columns on the page however should 
be a column break.
+enum = ThisComponent.Text.createEnumeration
+enum.nextElement
+para1 = enum.nextElement
+xray para1.String
+xray para1.PageStyleName
+enum.nextElement
+para2 = enum.nextElement
+xray para2.String
+xray para2.PageStyleName
+*/
+    uno::Reference<text::XTextDocument> textDocument(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> 
paraEnumAccess(textDocument->getText(), uno::UNO_QUERY);
+    // list of paragraphs
+    uno::Reference<container::XEnumeration> paraEnum = 
paraEnumAccess->createEnumeration();
+    // get the 2nd and 4th paragraph
+    (void) paraEnum->nextElement();
+    uno::Reference<uno::XInterface> paragraph1(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    (void) paraEnum->nextElement();
+    uno::Reference<uno::XInterface> paragraph2(paraEnum->nextElement(), 
uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text1(paragraph1, uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> text2(paragraph2, uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL( OUString( "text1" ), text1->getString());
+    CPPUNIT_ASSERT_EQUAL( OUString( "text2" ), text2->getString());
+    uno::Reference<beans::XPropertySet> paragraphProperties1(paragraph1, 
uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> paragraphProperties2(paragraph2, 
uno::UNO_QUERY);
+    OUString pageStyle1, pageStyle2;
+    paragraphProperties1->getPropertyValue( "PageStyleName" ) >>= pageStyle1;
+    paragraphProperties2->getPropertyValue( "PageStyleName" ) >>= pageStyle2;
+    // "Standard" is the style for the first page (2nd is "Convert 1").
+    CPPUNIT_ASSERT_EQUAL( OUString( "Standard" ), pageStyle1 );
+    CPPUNIT_ASSERT_EQUAL( OUString( "Standard" ), pageStyle2 );
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit 5935a6db64830ac5b932803cdcac5813aa033594
Author: Luboš Luňák <l.lu...@suse.cz>
Date:   Thu May 24 15:27:57 2012 +0200

    column break without columns seems to be a page break (bnc#750255)
    
    That at least seems to be my conclusion after testing the doc
    and bnc#652364 in MSO2k7.
    
    Change-Id: Iec172dad32ba47c1f843df49a4eaff688c094373

diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index e7ae45c..fdeafca 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -3886,8 +3886,10 @@ void wwSectionManager::InsertSegments()
     mySegIter aStart = maSegments.begin();
     for (mySegIter aIter = aStart; aIter != aEnd; ++aIter)
     {
-        // If the section is of type "New column" (0x01), then simply insert a 
column break
-        if ( aIter->maSep.bkc == 1 )
+        // If the section is of type "New column" (0x01), then simply insert a 
column break.
+        // But only if there actually are columns on the page, otherwise a 
column break
+        // seems to be handled like a page break by MSO.
+        if ( aIter->maSep.bkc == 1 && aIter->maSep.ccolM1 > 0 )
         {
             SwPaM start( aIter->maStart );
             mrReader.rDoc.InsertPoolItem( start, 
SvxFmtBreakItem(SVX_BREAK_COLUMN_BEFORE, RES_BREAK), 0);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to