Kaydet (Commit) eac3e6e7 authored tarafından Miklos Vajna's avatar Miklos Vajna

n#789482 DOCX: export track change data after w:hyperlink

Change-Id: If204523d7da544b11b2d809993ada180476104ef
üst dd77f79f
...@@ -66,6 +66,7 @@ public: ...@@ -66,6 +66,7 @@ public:
void testFdo47669(); void testFdo47669();
void testTableBorders(); void testTableBorders();
void testFdo51550(); void testFdo51550();
void testN789482();
CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT) #if !defined(MACOSX) && !defined(WNT)
...@@ -103,6 +104,7 @@ void Test::run() ...@@ -103,6 +104,7 @@ void Test::run()
{"fdo47669.docx", &Test::testFdo47669}, {"fdo47669.docx", &Test::testFdo47669},
{"table-borders.docx", &Test::testTableBorders}, {"table-borders.docx", &Test::testTableBorders},
{"fdo51550.odt", &Test::testFdo51550}, {"fdo51550.odt", &Test::testFdo51550},
{"n789482.docx", &Test::testN789482},
}; };
// Don't test the first import of these, for some reason those tests fail // Don't test the first import of these, for some reason those tests fail
const char* aBlacklist[] = { const char* aBlacklist[] = {
...@@ -482,6 +484,24 @@ void Test::testFdo51550() ...@@ -482,6 +484,24 @@ void Test::testFdo51550()
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDraws->getCount()); CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDraws->getCount());
} }
void Test::testN789482()
{
// The problem was that w:del was exported before w:hyperlink, resulting in an invalid XML.
uno::Reference<text::XTextRange> xParagraph = getParagraph(1);
getRun(xParagraph, 1, "Before. ");
CPPUNIT_ASSERT_EQUAL(OUString("Delete"), getProperty<OUString>(getRun(xParagraph, 2), "RedlineType"));
CPPUNIT_ASSERT_EQUAL(sal_True, getProperty<sal_Bool>(getRun(xParagraph, 2), "IsStart"));
getRun(xParagraph, 3, "www.test.com");
CPPUNIT_ASSERT_EQUAL(OUString("http://www.test.com/"), getProperty<OUString>(getRun(xParagraph, 3), "HyperLinkURL"));
CPPUNIT_ASSERT_EQUAL(OUString("Delete"), getProperty<OUString>(getRun(xParagraph, 4), "RedlineType"));
CPPUNIT_ASSERT_EQUAL(sal_False, getProperty<sal_Bool>(getRun(xParagraph, 4), "IsStart"));
getRun(xParagraph, 5, " After.");
}
CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -461,8 +461,9 @@ void DocxAttributeOutput::EndParagraphProperties() ...@@ -461,8 +461,9 @@ void DocxAttributeOutput::EndParagraphProperties()
void DocxAttributeOutput::StartRun( const SwRedlineData* pRedlineData, bool /*bSingleEmptyRun*/ ) void DocxAttributeOutput::StartRun( const SwRedlineData* pRedlineData, bool /*bSingleEmptyRun*/ )
{ {
// if there is some redlining in the document, output it // Don't start redline data here, possibly there is a hyperlink later, and
StartRedline( pRedlineData ); // that has to be started first.
m_pRedlineData = pRedlineData;
// postpone the output of the start of a run (there are elements that need // postpone the output of the start of a run (there are elements that need
// to be written before the start of the run, but we learn which they are // to be written before the start of the run, but we learn which they are
...@@ -539,6 +540,9 @@ void DocxAttributeOutput::EndRun() ...@@ -539,6 +540,9 @@ void DocxAttributeOutput::EndRun()
m_startedHyperlink = true; m_startedHyperlink = true;
} }
// if there is some redlining in the document, output it
StartRedline();
DoWriteBookmarks( ); DoWriteBookmarks( );
WriteCommentRanges(); WriteCommentRanges();
...@@ -1237,12 +1241,11 @@ void DocxAttributeOutput::Redline( const SwRedlineData* /*pRedline*/ ) ...@@ -1237,12 +1241,11 @@ void DocxAttributeOutput::Redline( const SwRedlineData* /*pRedline*/ )
OSL_TRACE( "TODO DocxAttributeOutput::Redline( const SwRedlineData* pRedline )" ); OSL_TRACE( "TODO DocxAttributeOutput::Redline( const SwRedlineData* pRedline )" );
} }
void DocxAttributeOutput::StartRedline( const SwRedlineData* pRedlineData ) void DocxAttributeOutput::StartRedline()
{ {
m_pRedlineData = pRedlineData;
if ( !m_pRedlineData ) if ( !m_pRedlineData )
return; return;
const SwRedlineData* pRedlineData = m_pRedlineData;
// FIXME check if it's necessary to travel over the Next()'s in pRedlineData // FIXME check if it's necessary to travel over the Next()'s in pRedlineData
......
...@@ -132,7 +132,7 @@ public: ...@@ -132,7 +132,7 @@ public:
/// ///
/// Start of the tag that encloses the run, fills the info according to /// Start of the tag that encloses the run, fills the info according to
/// the value of m_pRedlineData. /// the value of m_pRedlineData.
void StartRedline( const SwRedlineData* pRedlineData ); void StartRedline();
/// Output redlining. /// Output redlining.
/// ///
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment