Source code for timApp.documentmodel.test_attributeparser
import unittest
from documentmodel.attributeparser import AttributeParser
[docs]class AttributeParserTest(unittest.TestCase):
[docs]    def test_random(self):
        self.check_valid('{}', {})
        self.check_valid('{#asd}', {'taskId': 'asd'})
        self.check_valid('{#asd .someClass .someClass2}', {'taskId': 'asd',
                                                           'classes': ['someClass', 'someClass2']})
        self.check_valid('{#asd .someClass somekey=someval emptykey= .someClass2}',
                         {
                             'taskId': 'asd',
                             'classes': ['someClass', 'someClass2'],
                             'somekey': 'someval',
                             'emptykey': ''
                         }) 
[docs]    def test_keyvalues(self):
        self.check_valid('{somekey=someval}', {'somekey': 'someval'})
        self.check_valid('{somekey=}', {'somekey': ''})
        self.check_valid('{somekey=""}', {'somekey': ''})
        self.check_valid('{somekey=a""}', {'somekey': 'a""'})
        self.check_valid('{somekey="someval"}', {'somekey': 'someval'})
        self.check_valid('{somekey="someval with spaces"}', {'somekey': 'someval with spaces'})
        self.check_valid(r'{somekey="\""}', {'somekey': '"'})
        self.check_valid(r'{somekey=\}', {'somekey': '\\'})
        self.check_valid(r'{somekey=\"}', {'somekey': '\\"'}) 
[docs]    def test_whitespace(self):
        self.check_valid('  { #asd  }   ', {'taskId': 'asd'}, 2)
        self.check_valid('#Header { #asd  }   ', {'taskId': 'asd'}, 8)
        self.check_valid('``` {#asd plugin=csPlugin}   ',
                         {
                             'taskId': 'asd',
                             'plugin': 'csPlugin'
                         }, 4) 
[docs]    def check_valid(self, string, expected, expected_index=0):
        ap = AttributeParser()
        attrs, index = ap.set_str(string).get_attributes()
        self.assertDictEqual(expected, attrs)
        self.assertEqual(expected_index, index) 
[docs]    def check_invalid(self, string):
        ap = AttributeParser()
        attrs, index = ap.set_str(string).get_attributes()
        self.assertDictEqual({}, attrs)
        self.assertEqual(None, index) 
[docs]    def test_broken(self):
        self.check_invalid('  { #asd     ')
        self.check_invalid('  { #asd')
        self.check_invalid(r'\{ #asd}')
        self.check_invalid('   #asd     }')
        self.check_invalid('{somekey="}')
        self.check_invalid('{somekey="""}')
        self.check_invalid('{.}')
        self.check_invalid('{=}')
        self.check_invalid('{#}')
        self.check_invalid('{#task1 #task2}')  # Only 1 task id allowed
        self.check_invalid('\\')
        self.check_invalid('{a=b c=')  
if __name__ == '__main__':
    unittest.main()