From 0fa184cb6fbe05ebbec9054b493e80b9a5e91683 Mon Sep 17 00:00:00 2001
From: jvoisin <julien.voisin@dustri.org>
Date: Mon, 23 Apr 2018 00:24:39 +0200
Subject: [PATCH] Test .odf support

---
 src/office.py         |   3 ++-
 tests/data/dirty.odf  | Bin 0 -> 4861 bytes
 tests/test_libmat2.py |  16 +++++++++++++++-
 3 files changed, 17 insertions(+), 2 deletions(-)
 create mode 100644 tests/data/dirty.odf

diff --git a/src/office.py b/src/office.py
index 11692c3..5509c6e 100644
--- a/src/office.py
+++ b/src/office.py
@@ -107,7 +107,8 @@ class LibreOfficeParser(ArchiveBasedAbstractParser):
             'application/vnd.oasis.opendocument.spreadsheet',
             'application/vnd.oasis.opendocument.presentation',
             'application/vnd.oasis.opendocument.graphics',
-            'application/vnd.oasis.opendocument.chart'
+            'application/vnd.oasis.opendocument.chart',
+            'application/vnd.oasis.opendocument.formula',
     }
 
     def get_meta(self):
diff --git a/tests/data/dirty.odf b/tests/data/dirty.odf
new file mode 100644
index 0000000000000000000000000000000000000000..49da2bc22aba0bec45f4658cfa3c8a5679ecdd1a
GIT binary patch
literal 4861
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
X7vRmx22#e)z|ZiRnStR8ABYD4Me3W<

literal 0
HcmV?d00001

diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py
index ff5c196..6efaf31 100644
--- a/tests/test_libmat2.py
+++ b/tests/test_libmat2.py
@@ -328,7 +328,6 @@ class TestCleaning(unittest.TestCase):
 
         os.remove('./tests/data/clean.bmp')
 
-
     def test_torrent(self):
         shutil.copy('./tests/data/dirty.torrent', './tests/data/clean.torrent')
         p = torrent.TorrentParser('./tests/data/clean.torrent')
@@ -343,3 +342,18 @@ class TestCleaning(unittest.TestCase):
         self.assertEqual(p.get_meta(), {})
 
         os.remove('./tests/data/clean.torrent')
+
+    def test_odf(self):
+        shutil.copy('./tests/data/dirty.odf', './tests/data/clean.odf')
+        p = office.LibreOfficeParser('./tests/data/clean.odf')
+
+        meta = p.get_meta()
+        self.assertEqual(meta['meta:creation-date'], '2018-04-23T00:18:59.438231281')
+
+        ret = p.remove_all()
+        self.assertTrue(ret)
+
+        p = office.LibreOfficeParser('./tests/data/clean.odf.cleaned')
+        self.assertEqual(p.get_meta(), {})
+
+        os.remove('./tests/data/clean.odf')
-- 
GitLab