source: OpenWorkouts-current/ow/tests/test_utilities.py @ 5ec3a0b

currentfeature/docs
Last change on this file since 5ec3a0b was 5ec3a0b, checked in by borja <borja@…>, 5 years ago

Imported sources from the old python2-only repository:

  • Modified the code so it is python 3.6 compatible
  • Fixed deprecation warnings, pyramid 1.10.x supported now
  • Fixed deprecation warnings about some libraries, like pyramid-simpleform
  • Added pytest-pycodestyle and pytest-flakes for automatic checks on the source code files when running tests.
  • Added default pytest.ini setup to enforce some default parameters when running tests.
  • Cleaned up the code a bit, catched up with tests coverage.
  • Property mode set to 100644
File size: 3.5 KB
Line 
1import os
2from pyexpat import ExpatError
3from xml.dom.minidom import Element
4
5import pytest
6
7from ow.utilities import slugify, GPXMinidomParser
8
9
10class TestUtilities(object):
11
12    def test_slugify(self):
13        res = slugify(u'long story SHORT      ')
14        assert res == u'long-story-short'
15        res = slugify(u'bla \u03ba\u03b1\u03bb\u03ac \u03c0\u03b1\u03c2')
16        assert res == u'bla-kala-pas'
17
18    def test_slugify_special_chars(self):
19        res = slugify(u'(r)-[i]\u00AE')
20        assert res == u'r-i-r'
21
22
23class TestGPXParseMinidom(object):
24
25    def gpx_file(self, filename):
26        """
27        Return the full path to the given filename from the available fixtures
28        """
29        here = os.path.abspath(os.path.dirname(__file__))
30        path = os.path.join(here, 'fixtures', filename)
31        return path
32
33    def test_load_gpx_invalid(self):
34        gpx_file = self.gpx_file('invalid.gpx')
35        parser = GPXMinidomParser(gpx_file)
36        with pytest.raises(ExpatError):
37            parser.load_gpx()
38        assert parser.gpx is None
39
40    gpx_files = [
41        ('empty.gpx', Element),
42        ('20131013.gpx', Element),  # GPX 1.0 file
43        ('20160129-with-extensions.gpx', Element),  # GPX 1.1 file with ext.
44    ]
45
46    @pytest.mark.parametrize(('filename', 'expected'), gpx_files)
47    def test_load_gpx(self, filename, expected):
48        """
49        Loading valid gpx files ends in the gpx attribute of the parser
50        being a xml.dom.minidom.Element object, not matter if the gpx file
51        is empty or a 1.0/1.1 gpx file.
52        """
53        gpx_file = self.gpx_file(filename)
54        parser = GPXMinidomParser(gpx_file)
55        parser.load_gpx()
56        assert isinstance(parser.gpx, expected)
57
58    def test_parse_tracks_empty_gpx(self):
59        gpx_file = self.gpx_file('empty.gpx')
60        parser = GPXMinidomParser(gpx_file)
61        parser.load_gpx()
62        parser.parse_tracks()
63        assert parser.tracks == {}
64
65    def test_parse_tracks_1_0_gpx(self):
66        """
67        Parsing a GPX 1.0 file with no extensions. The points in the track
68        contain keys for the well-known extensions (hr, cad, atemp), but their
69        values are None
70        """
71        gpx_file = self.gpx_file('20131013.gpx')
72        parser = GPXMinidomParser(gpx_file)
73        parser.load_gpx()
74        parser.parse_tracks()
75        keys = list(parser.tracks.keys())
76        assert keys == [u'A ride I will never forget']
77        point = parser.tracks[keys[0]][0]
78        data = ['lat', 'lon', 'ele', 'time']
79        for d in data:
80            assert point[d] is not None
81        extensions = ['hr', 'cad', 'atemp']
82        for e in extensions:
83            assert point[e] is None
84
85    def test_parse_tracks_1_1_gpx(self):
86        """
87        Parsing a GPX 1.1 file with extensions. The points in the track contain
88        keys for the well-known extensions (hr, cad, atemp), with the values
89        taken from the gpx file (although we test only that they are not None)
90        """
91        gpx_file = self.gpx_file('20160129-with-extensions.gpx')
92        parser = GPXMinidomParser(gpx_file)
93        parser.load_gpx()
94        parser.parse_tracks()
95        keys = list(parser.tracks.keys())
96        assert keys == [
97            u'Cota counterclockwise + end bonus']
98        point = parser.tracks[keys[0]][0]
99        data = ['lat', 'lon', 'ele', 'time']
100        for d in data:
101            assert point[d] is not None
102        extensions = ['hr', 'cad', 'atemp']
103        for e in extensions:
104            assert point[e] is not None
Note: See TracBrowser for help on using the repository browser.