Skip to content

Commit ca6a9cc

Browse files
committed
Added unit test for ixt3, ixt4 and ixt-sec registries
1 parent ff08c8c commit ca6a9cc

File tree

2 files changed

+120
-11
lines changed

2 files changed

+120
-11
lines changed

tests/test_transformation.py

Lines changed: 116 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,153 @@
1717
testTransforms = {
1818
"http://www.xbrl.org/inlineXBRL/transformation/2015-02-26": [
1919
# [format,value,expected]
20-
['booleanfalse', 'no', 'false'],
20+
['booleanfalse', 'nope', 'false'],
21+
2122
['booleantrue', 'yeah', 'true'],
2223

2324
['datedaymonth', '2.12', '--12-02'],
25+
['datedaymonth', '1.1', '--01-01'],
26+
['datedaymonth', '12.11', '--11-12'],
27+
2428
['datedaymonthen', '2. December', '--12-02'],
29+
['datedaymonthen', '2 Sept.', '--09-02'],
30+
['datedaymonthen', '14. april', '--04-14'],
31+
2532
['datedaymonthyear', '2.12.2021', '2021-12-02'],
33+
['datedaymonthyear', '1.1.99', '1999-01-01'],
34+
['datedaymonthyear', '18. 02 2022', '2022-02-18'],
35+
2636
['datedaymonthyearen', '02. December 2021', '2021-12-02'],
37+
['datedaymonthyearen', '13. Dec. 21', '2021-12-13'],
38+
['datedaymonthyearen', '1 Feb 99', '1999-02-01'],
39+
2740
['datemonthday', '1.2', '--01-02'],
41+
['datemonthday', '12-1', '--12-01'],
42+
['datemonthday', '1.30', '--01-30'],
43+
2844
['datemonthdayen', 'Jan 02', '--01-02'],
45+
['datemonthdayen', 'February 13', '--02-13'],
46+
['datemonthdayen', 'sept. 1', '--09-01'],
47+
2948
['datemonthdayyear', '12-30-2021', '2021-12-30'],
49+
['datemonthdayyear', '2-16-22', '2022-02-16'],
50+
['datemonthdayyear', '2-1-2019', '2019-02-01'],
51+
3052
['datemonthdayyearen', 'March 31, 2021', '2021-03-31'],
31-
['dateyearmonthday', '2021.12.31', '2021-12-31'],
53+
['datemonthdayyearen', 'Dec. 31, 22', '2022-12-31'],
54+
['datemonthdayyearen', 'april 12 2021', '2021-04-12'],
3255

3356
['datemonthyear', '12 2021', '2021-12'],
57+
['datemonthyear', '1 22', '2022-01'],
58+
['datemonthyear', '02-1999', '1999-02'],
59+
3460
['datemonthyearen', 'December 2021', '2021-12'],
61+
['datemonthyearen', 'apr. 22', '2022-04'],
62+
['datemonthyearen', 'Sept. 2000', '2000-09'],
63+
64+
['dateyearmonthday', '2021.12.31', '2021-12-31'],
65+
['dateyearmonthday', '2021 1 31', '2021-01-31'],
66+
['dateyearmonthday', '22-1-1', '2022-01-01'],
67+
3568
['dateyearmonthen', '2021 December', '2021-12'],
69+
['dateyearmonthen', '22 sept.', '2022-09'],
70+
['dateyearmonthen', '21.apr.', '2021-04'],
3671

3772
['nocontent', 'Bla bla', ''],
73+
3874
['numcommadecimal', '1.499,99', '1499.99'],
75+
['numcommadecimal', '100*499,999', '100499.999'],
76+
['numcommadecimal', '0,5', '0.5'],
77+
3978
['numdotdecimal', '1,499.99', '1499.99'],
79+
['numdotdecimal', '1*499', '1499'],
80+
['numdotdecimal', '1,000,000.5', '1000000.5'],
4081

41-
['zerodash', '-', '0'],
82+
['zerodash', '--', '0'],
4283
],
4384
"http://www.xbrl.org/inlineXBRL/transformation/2020-02-12": [
4485
# [format,value,expected]
86+
['date-day-month', '1.1', '--01-01'],
87+
['date-day-month', '31-12', '--12-31'],
88+
['date-day-month', '27*2', '--02-27'],
89+
90+
['date-day-month-year', '1-2-20', '2020-02-01'],
91+
['date-day-month-year', '1-02-20', '2020-02-01'],
92+
['date-day-month-year', '01 02 2020', '2020-02-01'],
93+
94+
['date-day-monthname-en', '1. sept.', '--09-01'],
95+
['date-day-monthname-en', '01. sep.', '--09-01'],
96+
['date-day-monthname-en', '30 August', '--08-30'],
97+
98+
['date-day-monthname-year-en', '30 August 22', '2022-08-30'],
99+
['date-day-monthname-year-en', '01 Aug 22', '2022-08-01'],
100+
['date-day-monthname-year-en', '1 Aug 2022', '2022-08-01'],
101+
102+
['date-month-day', '1 31', '--01-31'],
103+
['date-month-day', '01-31', '--01-31'],
104+
['date-month-day', '12.1', '--12-01'],
105+
106+
['date-month-day-year', '12. 1 22', '2022-12-01'],
107+
['date-month-day-year', '01/12/2022', '2022-01-12'],
108+
['date-month-day-year', '01.12.2022', '2022-01-12'],
109+
110+
['date-month-year', '1*22', '2022-01'],
111+
['date-month-year', '01 22', '2022-01'],
112+
['date-month-year', '12.2022', '2022-12'],
113+
114+
['date-monthname-day-en', 'April/1', '--04-01'],
115+
['date-monthname-day-en', 'Sept./20', '--09-20'],
116+
['date-monthname-day-en', 'december 31', '--12-31'],
117+
118+
['date-monthname-day-year-en', 'december 31, 22', '2022-12-31'],
119+
['date-monthname-day-year-en', 'dec. 31, 2022', '2022-12-31'],
120+
['date-monthname-day-year-en', 'dec. 1, 2022', '2022-12-01'],
121+
122+
['date-year-month', '99/1', '1999-01'],
123+
['date-year-month', '2022 - 12', '2022-12'],
124+
['date-year-month', '2022 -/ 1', '2022-01'],
125+
126+
['date-year-month-day', ' 22-1-2 ', '2022-01-02'],
127+
['date-year-month-day', ' 2022/1/2 ', '2022-01-02'],
128+
['date-year-month-day', ' 22/01/02 ', '2022-01-02'],
129+
130+
['date-year-monthname-en', '22/december', '2022-12'],
131+
['date-year-monthname-en', '22/dec.', '2022-12'],
132+
['date-year-monthname-en', '2022-dec', '2022-12'],
133+
134+
['fixed-empty', 'some text', ''],
135+
['fixed-false', 'some text', 'false'],
136+
['fixed-true', 'some text', 'true'],
137+
['fixed-zero', 'some text', '0'],
138+
139+
['num-comma-decimal', '1.499,99', '1499.99'],
140+
['num-comma-decimal', '100*499,999', '100499.999'],
141+
['num-comma-decimal', '0,5', '0.5'],
142+
143+
['num-dot-decimal', '1,499.99', '1499.99'],
144+
['num-dot-decimal', '1*499', '1499'],
145+
['num-dot-decimal', '1,000,000.5', '1000000.5'],
146+
45147
],
46148
"http://www.sec.gov/inlineXBRL/transformation/2015-08-31": [
47149
# [format,value,expected]
150+
['durwordsen', 'Five years, two months', 'P5Y2M0D'],
151+
['durwordsen', '9 years, 2 months', 'P9Y2M0D'],
152+
['durwordsen', '12 days', 'P0Y0M12D'],
153+
['durwordsen', 'ONE MONTH AND THREE DAYS', 'P0Y1M3D'],
154+
48155
['numwordsen', 'no', '0'],
49156
['numwordsen', 'None', '0'],
50157
['numwordsen', 'nineteen hundred forty-four', '1944'],
51158
['numwordsen', 'Seventy Thousand and one', '70001'],
159+
52160
['boolballotbox', '☐', 'false'],
161+
['boolballotbox', '☐', 'false'],
53162
['boolballotbox', '☑', 'true'],
163+
['boolballotbox', '☑', 'true'],
54164
['boolballotbox', '☒', 'true'],
55-
['durwordsen', 'Five years, two months', 'P5Y2M0D'],
56-
['durwordsen', '9 years, 2 months', 'P9Y2M0D'],
57-
['durwordsen', '12 days', 'P0Y0M12D']
165+
['boolballotbox', '☒', 'true'],
166+
58167
]
59168
}
60169

@@ -69,7 +178,7 @@ def test_normalize(self):
69178
for i, testCase in enumerate(testTransforms[namespace]):
70179
formatCode, testInput, expected = testCase
71180
testOutput = normalize(namespace, formatCode, testInput)
72-
self.assertEqual(expected, testOutput, msg=f'Failed at test elem {i}')
181+
self.assertEqual(expected, testOutput, msg=f'Failed at test elem {i} of registry {namespace}')
73182

74183

75184
if __name__ == '__main__':

xbrl/transformations/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def notImplemented(arg: str) -> str:
9191

9292
def yearNorm(year: str) -> str:
9393
if len(year) == 4: return year
94-
if len(year) == 2: return '19' if int(year) > 60 else '20' + year
94+
if len(year) == 2: return '19' + year if int(year) > 55 else '20' + year
9595
raise TransformationException(f'Could not normalize "{year}" to a year')
9696

9797

@@ -115,7 +115,7 @@ def dateDayMonthEN(arg: str) -> str:
115115
def dateDayMonthYear(arg: str) -> str:
116116
# (D)D*(M)M*(Y)Y(YY) -> YYYY-MM-DD
117117
seg = re.split(r'[^\d]+', arg) # split at any char sequence that is not a digit
118-
return f"{seg[2].zfill(2)}-{seg[1].zfill(2)}-{seg[0].zfill(2)}"
118+
return f"{yearNorm(seg[2])}-{seg[1].zfill(2)}-{seg[0].zfill(2)}"
119119

120120

121121
def dateDayMonthYearEN(arg: str) -> str:
@@ -151,7 +151,7 @@ def dateMonthDayYearEN(arg: str) -> str:
151151
def dateMonthYear(arg: str) -> str:
152152
# (M)M*(Y)Y(YY) -> YYYY-MM
153153
seg = re.split(r'[^\d]+', arg) # split at any char sequence that is not a digit
154-
return f"{seg[1].zfill(2)}-{seg[0].zfill(2)}"
154+
return f"{yearNorm(seg[1])}-{seg[0].zfill(2)}"
155155

156156

157157
def dateMonthYearEN(arg: str) -> str:
@@ -180,7 +180,7 @@ def dateYearMonthEN(arg: str) -> str:
180180

181181
def numCommaDecimal(arg: str) -> str:
182182
# nnn*nnn*nnn,n -> nnnnnnnnn.n
183-
arg = re.sub(r'(\s|-|\.)', '', arg)
183+
arg = re.sub(r'[^\d,]+', '', arg) # remove all chars that are not a digit and not a comma
184184
return arg.replace(',', '.')
185185

186186

0 commit comments

Comments
 (0)