forked from kenkeiras/org-rw
78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
import collections
|
|
import unittest
|
|
from datetime import datetime
|
|
|
|
|
|
def timestamp_to_datetime(ts):
|
|
return datetime(ts.year, ts.month, ts.day, ts.hour, ts.minute)
|
|
|
|
|
|
class Dom:
|
|
def __init__(self, *, props=None, children=None):
|
|
self.props = props
|
|
self.children = children
|
|
if isinstance(self.children, HL):
|
|
self.children = [self.children]
|
|
|
|
def assert_matches(self, test_case: unittest.TestCase, doc):
|
|
# Check properties
|
|
if self.props is None:
|
|
test_case.assertEqual(len(doc.getProperties()), 0)
|
|
else:
|
|
doc_props = doc.getProperties()
|
|
test_case.assertEqual(len(doc_props), len(self.props))
|
|
|
|
for i, prop in enumerate(self.props):
|
|
test_case.assertEqual(doc_props[i].key, prop[0])
|
|
test_case.assertEqual(doc_props[i].value, prop[1])
|
|
|
|
# @TODO: Check properties
|
|
|
|
# Check children
|
|
if self.children is None:
|
|
test_case.assertEqual(len(doc.getTopHeadlines()), 0, "Top")
|
|
else:
|
|
doc_headlines = doc.getTopHeadlines()
|
|
test_case.assertEqual(len(doc_headlines), len(self.children),
|
|
"Top")
|
|
|
|
for i, children in enumerate(self.children):
|
|
children.assert_matches(test_case, doc_headlines[i])
|
|
|
|
|
|
class HL:
|
|
def __init__(self, title, *, props=None, content=None, children=None):
|
|
self.title = title
|
|
self.props = props
|
|
self.content = content
|
|
self.children = children
|
|
|
|
def assert_matches(self, test_case: unittest.TestCase, doc):
|
|
test_case.assertEqual(self.title, doc['title'])
|
|
|
|
# Check properties
|
|
if self.props is None:
|
|
test_case.assertEqual(len(doc['properties']), 0)
|
|
else:
|
|
doc_props = doc['properties']
|
|
test_case.assertEqual(len(doc_props), len(self.props))
|
|
|
|
for i, prop in enumerate(self.props):
|
|
test_case.assertEqual(doc_props[i].key, prop[0])
|
|
if isinstance(prop[1], datetime):
|
|
test_case.assertEqual(
|
|
timestamp_to_datetime(doc_props[i].value), prop[1])
|
|
|
|
# @TODO: Check properties
|
|
|
|
# Check children
|
|
if self.children is None:
|
|
test_case.assertEqual(len(doc['children']), 0)
|
|
else:
|
|
doc_headlines = doc['children']
|
|
test_case.assertEqual(len(doc_headlines), len(self.children),
|
|
self.title)
|
|
|
|
for i, children in enumerate(self.children):
|
|
children.assert_matches(test_case, doc_headlines[i])
|