Source code for unit.dataimport.timelinexml

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline.  If not, see <http://www.gnu.org/licenses/>.


import os

import wx

from timelinelib.test.cases.tmpdir import TmpDirTestCase
from timelinelib.test.cases.wxapp import WxAppTestCase
from timelinelib.dataimport.timelinexml import import_db_from_timeline_xml, parse_icon
from timelinelib.dataexport.timelinexml import icon_string


[docs]class describe_import_timeline_xml(TmpDirTestCase):
[docs] def test_can_import_empty_file(self): db = self.import_file_with_content(""" <timeline> <version>0.0.0</version> <categories /> <events /> <view /> </timeline> """.strip())
[docs] def test_can_import_containers(self): db = self.import_file_with_content(""" <timeline> <version>0.0.0</version> <categories /> <events> <event> <start>2017-01-01 00:00:00</start> <end>2017-01-01 00:00:00</end> <text>[1]con</text> </event> <event> <start>2017-01-01 00:00:00</start> <end>2017-01-01 00:00:00</end> <text>(1)sub1</text> </event> </events> <view /> </timeline> """.strip()) all_events = db.get_all_events() containers = [e.text for e in all_events if e.is_container()] subevents = [e.text for e in all_events if e.is_subevent()] self.assertEqual((containers, subevents), (["con"], ["sub1"]))
[docs] def test_can_import_categories(self): db = self.import_file_with_content(""" <timeline> <version>0.0.0</version> <categories> <category> <name>cat-0</name> <color>50,200,50</color> </category> <category> <name>cat-1</name> <color>50,200,50</color> </category> <category> <name>cat-2</name> <color>50,200,50</color> </category> </categories> <events> <event> <start>2017-01-01 00:00:00</start> <end>2017-01-01 00:00:00</end> <text>event</text> <category>cat-0</category> <categories> <category>cat-2</category> <category>cat-1</category> </categories> </event> </events> <view /> </timeline> """.strip()) events = db.get_all_events() event = events[0] self.assertEqual('cat-0', event.get_category().name) self.assertEqual(['cat-2', 'cat-1'], [c.name for c in event.get_categories()])
[docs] def test_duplicate_categories_are_removed(self): db = self.import_file_with_content(""" <timeline> <version>0.0.0</version> <categories> <category> <name>cat-0</name> <color>50,200,50</color> </category> <category> <name>cat-1</name> <color>50,200,50</color> </category> <category> <name>cat-2</name> <color>50,200,50</color> </category> </categories> <events> <event> <start>2017-01-01 00:00:00</start> <end>2017-01-01 00:00:00</end> <text>event</text> <category>cat-0</category> <categories> <category>cat-0</category> <category>cat-1</category> <category>cat-1</category> </categories> </event> </events> <view /> </timeline> """.strip()) events = db.get_all_events() event = events[0] self.assertEqual('cat-0', event.get_category().name) self.assertEqual(['cat-1'], [c.name for c in event.get_categories()])
[docs] def test_missing_category_is_taken_from_list(self): db = self.import_file_with_content(""" <timeline> <version>0.0.0</version> <categories> <category> <name>cat-1</name> <color>50,200,50</color> </category> <category> <name>cat-2</name> <color>50,200,50</color> </category> </categories> <events> <event> <start>2017-01-01 00:00:00</start> <end>2017-01-01 00:00:00</end> <text>event</text> <categories> <category>cat-2</category> <category>cat-1</category> </categories> </event> </events> <view /> </timeline> """.strip()) events = db.get_all_events() event = events[0] self.assertEqual('cat-2', event.get_category().name) self.assertEqual(['cat-1'], [c.name for c in event.get_categories()])
[docs] def import_file_with_content(self, content): path = self.get_tmp_path("tmp.timeline") with open(path, "w") as f: f.write(content) return import_db_from_timeline_xml(path)