예제 #1
0
    def test_parse_duration_prescribed_notime_outoforder(self):
        #Ensure durations are required to be in the correct order
        #https://bitbucket.org/nielsenb/aniso8601/issues/8/durations-with-components-in-wrong-order
        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1H1M', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1D1Y1M', None)
예제 #2
0
    def test_parse_duration_prescribed_notime_negative(self):
        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed_notime('P-1Y', None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed_notime('P-2M', None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed_notime('P-3D', None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed_notime('P-7W', None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed_notime('P-1Y2M3D', None)
    def test_parse_duration_prescribed_notime(self):
        testtuples = (
            ("P1Y2M3D", {"PnY": "1", "PnM": "2", "PnW": None, "PnD": "3"}),
            ("P1Y2M3.5D", {"PnY": "1", "PnM": "2", "PnW": None, "PnD": "3.5"}),
            ("P1Y2M3,5D", {"PnY": "1", "PnM": "2", "PnW": None, "PnD": "3.5"}),
            ("P1Y", {"PnY": "1", "PnM": None, "PnW": None, "PnD": None}),
            ("P1.5Y", {"PnY": "1.5", "PnM": None, "PnW": None, "PnD": None}),
            ("P1,5Y", {"PnY": "1.5", "PnM": None, "PnW": None, "PnD": None}),
            ("P1M", {"PnY": None, "PnM": "1", "PnW": None, "PnD": None}),
            ("P1.5M", {"PnY": None, "PnM": "1.5", "PnW": None, "PnD": None}),
            ("P1,5M", {"PnY": None, "PnM": "1.5", "PnW": None, "PnD": None}),
            ("P1W", {"PnY": None, "PnM": None, "PnW": "1", "PnD": None}),
            ("P1.5W", {"PnY": None, "PnM": None, "PnW": "1.5", "PnD": None}),
            ("P1,5W", {"PnY": None, "PnM": None, "PnW": "1.5", "PnD": None}),
            ("P1D", {"PnY": None, "PnM": None, "PnW": None, "PnD": "1"}),
            ("P1.5D", {"PnY": None, "PnM": None, "PnW": None, "PnD": "1.5"}),
            ("P1,5D", {"PnY": None, "PnM": None, "PnW": None, "PnD": "1.5"}),
        )

        for testtuple in testtuples:
            mockBuilder = mock.Mock()
            mockBuilder.build_duration.return_value = testtuple[1]

            result = _parse_duration_prescribed_notime(testtuple[0], mockBuilder)

            self.assertEqual(result, testtuple[1])
            mockBuilder.build_duration.assert_called_once_with(**testtuple[1])
예제 #4
0
    def test_parse_duration_prescribed_notime_timepart(self):
        #Ensure no time part is allowed
        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1S', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1D1S', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1H1M', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1Y2M3D4H', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime('P1Y2M3D4H5S', None)
예제 #5
0
    def test_parse_duration_prescribed_notime(self):
        testtuples = (('P1Y2M3D', {'PnY': '1', 'PnM': '2',
                                   'PnW': None, 'PnD': '3'}),
                      ('P1Y2M3.5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y2M3,5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y', {'PnY': '1', 'PnM': None,
                               'PnW': None, 'PnD': None}),
                      ('P1.5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1,5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1M', {'PnY': None, 'PnM': '1', 'PnW': None,
                               'PnD': None}),
                      ('P1.5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD': None}),
                      ('P1,5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD': None}),
                      ('P1W', {'PnY': None, 'PnM': None, 'PnW': '1',
                               'PnD': None}),
                      ('P1.5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1,5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1D', {'PnY': None, 'PnM': None, 'PnW': None,
                               'PnD': '1'}),
                      ('P1.5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}),
                      ('P1,5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}))

        for testtuple in testtuples:
            mockBuilder = mock.Mock()
            mockBuilder.build_duration.return_value = testtuple[1]

            result = _parse_duration_prescribed_notime(testtuple[0], mockBuilder)

            self.assertEqual(result, testtuple[1])
            mockBuilder.build_duration.assert_called_once_with(**testtuple[1])
예제 #6
0
    def test_parse_duration_prescribed_notime(self):
        testtuples = (('P1Y2M3D', {'PnY': '1', 'PnM': '2',
                                   'PnW': None, 'PnD': '3'}),
                      ('P1Y2M3,5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y2M3.5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y', {'PnY': '1', 'PnM': None,
                               'PnW': None, 'PnD': None}),
                      ('P1,5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1.5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1M', {'PnY': None, 'PnM': '1', 'PnW': None,
                               'PnD': None}),
                      ('P1,5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD':None}),
                      ('P1.5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD':None}),
                      ('P1W', {'PnY': None, 'PnM': None, 'PnW': '1',
                               'PnD': None}),
                      ('P1,5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1.5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1D', {'PnY': None, 'PnM': None, 'PnW': None,
                               'PnD': '1'}),
                      ('P1,5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}),
                      ('P1.5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}))

        for testtuple in testtuples:
            result = _parse_duration_prescribed_notime(testtuple[0])

            self.assertEqual(result, testtuple[1])
예제 #7
0
    def test_parse_duration_prescribed_notime(self):
        resultduration = _parse_duration_prescribed_notime('P1Y2M3D')
        self.assertEqual(resultduration, (1, 2, 0, 3, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1Y2M3.5D')
        self.assertEqual(resultduration, (1, 2, 0, 3.5, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1Y2M3,5D')
        self.assertEqual(resultduration, (1, 2, 0, 3.5, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1Y')
        self.assertEqual(resultduration, (1, 0, 0, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1.5Y')
        self.assertEqual(resultduration, (1.5, 0, 0, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1,5Y')
        self.assertEqual(resultduration, (1.5, 0, 0, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1M')
        self.assertEqual(resultduration, (0, 1, 0, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1.5M')
        self.assertEqual(resultduration, (0, 1.5, 0, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1,5M')
        self.assertEqual(resultduration, (0, 1.5, 0, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1W')
        self.assertEqual(resultduration, (0, 0, 1, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1.5W')
        self.assertEqual(resultduration, (0, 0, 1.5, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1,5W')
        self.assertEqual(resultduration, (0, 0, 1.5, 0, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1D')
        self.assertEqual(resultduration, (0, 0, 0, 1, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1.5D')
        self.assertEqual(resultduration, (0, 0, 0, 1.5, 0, 0, 0))

        resultduration = _parse_duration_prescribed_notime('P1,5D')
        self.assertEqual(resultduration, (0, 0, 0, 1.5, 0, 0, 0))
예제 #8
0
    def test_parse_duration_prescribed_notime_badstr(self):
        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime("P1S")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed_notime("P1D1S")
예제 #9
0
    def test_parse_duration_prescribed_notime(self):
        testtuples = (
            ("P1Y2M3D", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": "3"
            }),
            ("P1Y2M3,5D", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": "3.5"
            }),
            ("P1Y2M3.5D", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": "3.5"
            }),
            ("P1Y3D", {
                "PnY": "1",
                "PnM": None,
                "PnW": None,
                "PnD": "3"
            }),
            ("P1Y2M", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": None
            }),
            ("P2M3D", {
                "PnY": None,
                "PnM": "2",
                "PnW": None,
                "PnD": "3"
            }),
            ("P1Y", {
                "PnY": "1",
                "PnM": None,
                "PnW": None,
                "PnD": None
            }),
            ("P1,5Y", {
                "PnY": "1.5",
                "PnM": None,
                "PnW": None,
                "PnD": None
            }),
            ("P1.5Y", {
                "PnY": "1.5",
                "PnM": None,
                "PnW": None,
                "PnD": None
            }),
            ("P1M", {
                "PnY": None,
                "PnM": "1",
                "PnW": None,
                "PnD": None
            }),
            ("P1,5M", {
                "PnY": None,
                "PnM": "1.5",
                "PnW": None,
                "PnD": None
            }),
            ("P1.5M", {
                "PnY": None,
                "PnM": "1.5",
                "PnW": None,
                "PnD": None
            }),
            ("P1W", {
                "PnY": None,
                "PnM": None,
                "PnW": "1",
                "PnD": None
            }),
            ("P1,5W", {
                "PnY": None,
                "PnM": None,
                "PnW": "1.5",
                "PnD": None
            }),
            ("P1.5W", {
                "PnY": None,
                "PnM": None,
                "PnW": "1.5",
                "PnD": None
            }),
            ("P1D", {
                "PnY": None,
                "PnM": None,
                "PnW": None,
                "PnD": "1"
            }),
            ("P1,5D", {
                "PnY": None,
                "PnM": None,
                "PnW": None,
                "PnD": "1.5"
            }),
            ("P1.5D", {
                "PnY": None,
                "PnM": None,
                "PnW": None,
                "PnD": "1.5"
            }),
        )

        for testtuple in testtuples:
            result = _parse_duration_prescribed_notime(testtuple[0])

            self.assertEqual(result, testtuple[1])