示例#1
0
 def test_as_string(self):
     self.assertEqual(str(Duration.fromstring('P3Y1D')), 'P3Y1D')
     self.assertEqual(str(Duration.fromstring('PT2M10.4S')), 'PT2M10.4S')
     self.assertEqual(str(Duration.fromstring('PT2400H')), 'P100D')
     self.assertEqual(str(Duration.fromstring('-P15M')), '-P1Y3M')
     self.assertEqual(str(Duration.fromstring('-P809YT3H5M5S')),
                      '-P809YT3H5M5S')
    def test_duration_constructor(self):
        self.check_value('xs:duration("P3Y5M1D")', (41, 86400))
        self.check_value('xs:duration(xs:untypedAtomic("P3Y5M1D"))',
                         (41, 86400))
        self.check_value('xs:duration("P3Y5M1DT1H")', (41, 90000))
        self.check_value('xs:duration("P3Y5M1DT1H3M2.01S")',
                         (41, Decimal('90182.01')))

        self.check_value('xs:untypedAtomic("P3Y5M1D") castable as xs:duration',
                         True)
        self.check_value('"P8192912991912Y" castable as xs:duration', False)

        self.wrong_value('xs:duration("P3Y5M1X")')
        self.assertRaises(ValueError, self.parser.parse, 'xs:duration(1)')

        root = self.etree.XML('<root a="P1Y5M"/>')
        context = XPathContext(root)
        self.check_value('xs:duration(@a)',
                         Duration(months=17),
                         context=context)

        context.item = Duration(months=12, seconds=86400)
        self.check_value('xs:duration(.)',
                         Duration(12, 86400),
                         context=context)

        root = self.etree.XML('<root><a>P1Y5M</a></root>')
        context = XPathContext(root)
        self.check_value('xs:duration(.)',
                         Duration(months=17),
                         context=context)
    def test_year_month_duration_constructor(self):
        self.check_value('xs:yearMonthDuration("P3Y5M")', (41, 0))
        self.check_value('xs:yearMonthDuration(xs:untypedAtomic("P3Y5M"))',
                         (41, 0))
        self.check_value('xs:yearMonthDuration("-P15M")', (-15, 0))
        self.check_value('xs:yearMonthDuration("-P20Y18M")',
                         YearMonthDuration.fromstring("-P21Y6M"))
        self.check_value('xs:yearMonthDuration(xs:duration("P3Y5M"))', (41, 0))
        self.check_value(
            'xs:untypedAtomic("P3Y5M") castable as xs:yearMonthDuration', True)
        self.check_value(
            '"P9999999999999999Y" castable as xs:yearMonthDuration', False)

        self.wrong_value('xs:yearMonthDuration("-P15M1D")')
        self.wrong_value('xs:yearMonthDuration("P15MT1H")')
        self.wrong_value('xs:yearMonthDuration("P1MT10H")')

        root = self.etree.XML('<root a="P1Y5M"/>')
        context = XPathContext(root)
        self.check_value('xs:yearMonthDuration(@a)',
                         Duration(months=17),
                         context=context)

        context.item = YearMonthDuration(months=12)
        self.check_value('xs:yearMonthDuration(.)',
                         YearMonthDuration(12),
                         context=context)
    def test_init_fromstring(self):
        self.assertIsInstance(Duration.fromstring('P1Y'), Duration)
        self.assertIsInstance(Duration.fromstring('P1M'), Duration)
        self.assertIsInstance(Duration.fromstring('P1D'), Duration)
        self.assertIsInstance(Duration.fromstring('PT0H'), Duration)
        self.assertIsInstance(Duration.fromstring('PT1M'), Duration)
        self.assertIsInstance(Duration.fromstring('PT0.0S'), Duration)

        self.assertRaises(ValueError, Duration.fromstring, 'P')
        self.assertRaises(ValueError, Duration.fromstring, 'PT')
        self.assertRaises(ValueError, Duration.fromstring, '1Y')
        self.assertRaises(ValueError, Duration.fromstring, 'P1W1DT5H3M23.9S')
        self.assertRaises(ValueError, Duration.fromstring, 'P1.5Y')
        self.assertRaises(ValueError, Duration.fromstring, 'PT1.1H')
        self.assertRaises(ValueError, Duration.fromstring, 'P1.0DT5H3M23.9S')
 def test_incomparable_values(self):
     self.assertFalse(Duration(1) < Duration.fromstring('P30D'))
     self.assertFalse(Duration(1) <= Duration.fromstring('P30D'))
     self.assertFalse(Duration(1) > Duration.fromstring('P30D'))
     self.assertFalse(Duration(1) >= Duration.fromstring('P30D'))
 def test_ge(self):
     self.assertTrue(Duration(16) >= Duration(15))
     self.assertTrue(Duration(16) >= Duration(16))
     self.assertTrue(Duration.fromstring('P1Y1DT1S') >= Duration.fromstring('P1Y1D'))
 def test_gt(self):
     self.assertTrue(Duration(months=16) > Duration(15))
     self.assertFalse(Duration(months=16) > Duration(16))
 def test_le(self):
     self.assertTrue(Duration(months=15) <= Duration(months=16))
     self.assertTrue(Duration(months=16) <= Duration(16))
     self.assertTrue(Duration(months=16) <= Duration.fromstring('P16M1D'))
     self.assertTrue(Duration(months=16) <= Duration.fromstring('P16MT1H'))
     self.assertTrue(Duration(months=16) <= Duration.fromstring('P16MT1M'))
     self.assertTrue(Duration(months=16) <= Duration.fromstring('P16MT1S'))
     self.assertTrue(Duration(months=16) <= Duration.fromstring('P16MT0S'))
 def test_ne(self):
     self.assertNotEqual(Duration.fromstring('PT147.3S'), None)
     self.assertNotEqual(Duration.fromstring('PT147.3S'), (0, 147.3))
     self.assertNotEqual(Duration.fromstring('P3Y1D'), (36, 3600 * 2))
     self.assertNotEqual(Duration.fromstring('P3Y1D'), (36, 3600 * 24, 0))
     self.assertNotEqual(Duration.fromstring('P3Y1D'), None)
示例#10
0
    def test_eq(self):
        self.assertEqual(Duration.fromstring('PT147.5S'), (0, 147.5))
        self.assertEqual(Duration.fromstring('PT147.3S'), (0, Decimal("147.3")))

        self.assertEqual(Duration.fromstring('PT2M10.4S'), (0, Decimal("130.4")))
        self.assertEqual(Duration.fromstring('PT5H3M23.9S'), (0, Decimal("18203.9")))
        self.assertEqual(Duration.fromstring('P1DT5H3M23.9S'), (0, Decimal("104603.9")))
        self.assertEqual(Duration.fromstring('P31DT5H3M23.9S'), (0, Decimal("2696603.9")))
        self.assertEqual(Duration.fromstring('P1Y1DT5H3M23.9S'), (12, Decimal("104603.9")))

        self.assertEqual(Duration.fromstring('-P809YT3H5M5S'), (-9708, -11105))
        self.assertEqual(Duration.fromstring('P15M'), (15, 0))
        self.assertEqual(Duration.fromstring('P1Y'), (12, 0))
        self.assertEqual(Duration.fromstring('P3Y1D'), (36, 3600 * 24))
        self.assertEqual(Duration.fromstring('PT2400H'), (0, 8640000))
        self.assertEqual(Duration.fromstring('PT4500M'), (0, 4500 * 60))
        self.assertEqual(Duration.fromstring('PT4500M70S'), (0, 4500 * 60 + 70))
        self.assertEqual(Duration.fromstring('PT5529615.3S'), (0, Decimal('5529615.3')))
示例#11
0
 def test_numeric_type_proxy(self):
     self.assertIsInstance(10, NumericTypeProxy)
     self.assertIsInstance(17.8, NumericTypeProxy)
     self.assertIsInstance(Decimal('18.12'), NumericTypeProxy)
     self.assertNotIsInstance(True, NumericTypeProxy)
     self.assertNotIsInstance(Duration.fromstring('P1Y'), NumericTypeProxy)
示例#12
0
 def test_hashing(self):
     if sys.version_info < (3, 8):
         self.assertEqual(hash(Duration(16)), 3713063228956366931)
     else:
         self.assertEqual(hash(Duration(16)), 6141449309508620102)