Skip to content

Commit c637be7

Browse files
authored
Enable some test_types tests (#1380)
* Enable some test_types tests * Try to fix test * Disable failing test
1 parent f6fbf9b commit c637be7

5 files changed

Lines changed: 91 additions & 17 deletions

File tree

Src/IronPython/Runtime/Operations/FloatOps.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -892,10 +892,7 @@ private static string DoubleToFormatString(CodeContext/*!*/ context, double self
892892
}
893893

894894
string fmt;
895-
if (spec.Type == 'n' && context.LanguageContext.NumericCulture != PythonContext.CCulture) {
896-
// we've already figured out, we don't have any digits for decimal points, so just format as a number + exponent
897-
fmt = "0";
898-
} else if (spec.Precision > 1 || digitCnt > 6) {
895+
if (spec.Precision > 1 || digitCnt > 6) {
899896
// include the requested precision to the right of the decimal
900897
fmt = "0.#" + new string('#', precision);
901898
} else {

Src/IronPython/Runtime/StringFormatSpec.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,11 @@ private StringFormatSpec(char? fill, char? alignment, char? sign, int? width, bo
256256

257257
if (headerLen != 0) {
258258
string ssign = sign.HasValue ? sign.Value.ToString() : "";
259-
text = ssign + new string(fill, headerLen) + type + text;
259+
if (fill == ' ') {
260+
text = ssign + new string(fill, headerLen) + type + text;
261+
} else {
262+
text = ssign + type + new string(fill, headerLen) + text;
263+
}
260264
} else {
261265
if (sign != null) {
262266
text = sign.Value + text;

Src/IronPythonTest/Cases/CPythonCasesManifest.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,7 @@ Reason=ImportError: No module named '_tkinter'
995995
Ignore=true
996996
Reason=ImportError: No module named '_tkinter'
997997

998-
[CPython.test_types]
998+
[CPython.test_types] # IronPython.test_types_stdlib
999999
Ignore=true
10001000

10011001
[CPython.test_ucn]

Tests/test_strformat.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ def test_float___format__(self):
573573
else:
574574
_locale.setlocale(_locale.LC_ALL, 'English_United States.1252')
575575

576-
tests = [
576+
tests = [
577577
(1000.0, 'n', '1,000'),
578578
(1000.12345, 'n', '1,000.12'),
579579
(1000.5, 'n', '1,000.5'),
@@ -583,17 +583,9 @@ def test_float___format__(self):
583583
(100000.5, '.5n', '1e+05'),
584584

585585
(100000.5, '.7n', '100,000.5'),
586+
(100000.5, 'n', '100,000'),
587+
(100000.5, '.6n', '100,000'),
586588
]
587-
if is_cpython: #http://ironpython.codeplex.com/workitem/28206
588-
tests+= [
589-
(100000.5, 'n', '100,000'),
590-
(100000.5, '.6n', '100,000'),
591-
]
592-
else:
593-
tests+= [
594-
(100000.5, 'n', '100,000'),
595-
(100000.5, '.6n', '100,000'),
596-
]
597589

598590
for value, spec, result in tests:
599591
actual = value.__format__(spec)

Tests/test_types_stdlib.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# Licensed to the .NET Foundation under one or more agreements.
2+
# The .NET Foundation licenses this file to you under the Apache 2.0 License.
3+
# See the LICENSE file in the project root for more information.
4+
5+
##
6+
## Run selected tests from test_types from StdLib
7+
##
8+
9+
import unittest
10+
import sys
11+
12+
from iptest import is_linux, is_netcoreapp21, run_test
13+
14+
import test.test_types
15+
16+
def load_tests(loader, standard_tests, pattern):
17+
if sys.implementation.name == 'ironpython':
18+
suite = unittest.TestSuite()
19+
suite.addTest(test.test_types.ClassCreationTests('test_metaclass_derivation'))
20+
suite.addTest(test.test_types.ClassCreationTests('test_metaclass_override_callable'))
21+
suite.addTest(test.test_types.ClassCreationTests('test_metaclass_override_function'))
22+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_basics'))
23+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_defaults'))
24+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_exec_body'))
25+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_meta'))
26+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_meta_with_base'))
27+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_metaclass_keywords'))
28+
suite.addTest(test.test_types.ClassCreationTests('test_new_class_subclass'))
29+
suite.addTest(test.test_types.ClassCreationTests('test_prepare_class'))
30+
suite.addTest(unittest.expectedFailure(test.test_types.MappingProxyTests('test_chainmap'))) # TypeError: expected dict, got Object_1$1
31+
suite.addTest(unittest.expectedFailure(test.test_types.MappingProxyTests('test_constructor'))) # TypeError: expected dict, got Object_1$1
32+
suite.addTest(test.test_types.MappingProxyTests('test_contains'))
33+
suite.addTest(test.test_types.MappingProxyTests('test_copy'))
34+
suite.addTest(unittest.expectedFailure(test.test_types.MappingProxyTests('test_customdict'))) # AssertionError: False is not true
35+
suite.addTest(test.test_types.MappingProxyTests('test_get'))
36+
suite.addTest(test.test_types.MappingProxyTests('test_iterators'))
37+
suite.addTest(test.test_types.MappingProxyTests('test_len'))
38+
suite.addTest(test.test_types.MappingProxyTests('test_methods'))
39+
suite.addTest(unittest.expectedFailure(test.test_types.MappingProxyTests('test_missing'))) # AssertionError: 'missing=y' != None
40+
suite.addTest(test.test_types.MappingProxyTests('test_views'))
41+
suite.addTest(test.test_types.SimpleNamespaceTests('test_as_dict'))
42+
suite.addTest(unittest.expectedFailure(test.test_types.SimpleNamespaceTests('test_attrdel'))) # KeyError: spam
43+
suite.addTest(test.test_types.SimpleNamespaceTests('test_attrget'))
44+
suite.addTest(test.test_types.SimpleNamespaceTests('test_attrset'))
45+
suite.addTest(test.test_types.SimpleNamespaceTests('test_constructor'))
46+
suite.addTest(test.test_types.SimpleNamespaceTests('test_equal'))
47+
suite.addTest(test.test_types.SimpleNamespaceTests('test_fake_namespace_compare'))
48+
suite.addTest(test.test_types.SimpleNamespaceTests('test_nested'))
49+
suite.addTest(unittest.expectedFailure(test.test_types.SimpleNamespaceTests('test_pickle'))) # TypeError: protocol 0
50+
suite.addTest(test.test_types.SimpleNamespaceTests('test_recursive'))
51+
suite.addTest(test.test_types.SimpleNamespaceTests('test_recursive_repr'))
52+
suite.addTest(test.test_types.SimpleNamespaceTests('test_repr'))
53+
suite.addTest(test.test_types.SimpleNamespaceTests('test_subclass'))
54+
suite.addTest(test.test_types.SimpleNamespaceTests('test_unbound'))
55+
suite.addTest(test.test_types.SimpleNamespaceTests('test_underlying_dict'))
56+
suite.addTest(test.test_types.TypesTests('test_boolean_ops'))
57+
suite.addTest(test.test_types.TypesTests('test_comparisons'))
58+
suite.addTest(unittest.expectedFailure(test.test_types.TypesTests('test_float__format__'))) # AssertionError: '1.12339e+200' != '1.1234e+200'
59+
if is_netcoreapp21 and is_linux:
60+
suite.addTest(unittest.expectedFailure(test.test_types.TypesTests('test_float__format__locale'))) # https://github.com/IronLanguages/ironpython3/issues/751
61+
else:
62+
suite.addTest(test.test_types.TypesTests('test_float__format__locale'))
63+
suite.addTest(test.test_types.TypesTests('test_float_constructor'))
64+
suite.addTest(test.test_types.TypesTests('test_float_to_string'))
65+
suite.addTest(test.test_types.TypesTests('test_floats'))
66+
suite.addTest(test.test_types.TypesTests('test_format_spec_errors'))
67+
suite.addTest(test.test_types.TypesTests('test_int__format__'))
68+
suite.addTest(test.test_types.TypesTests('test_int__format__locale'))
69+
suite.addTest(unittest.expectedFailure(test.test_types.TypesTests('test_internal_sizes'))) # AttributeError: 'type' object has no attribute '__basicsize__'
70+
suite.addTest(test.test_types.TypesTests('test_normal_integers'))
71+
suite.addTest(test.test_types.TypesTests('test_numeric_types'))
72+
suite.addTest(test.test_types.TypesTests('test_strings'))
73+
suite.addTest(test.test_types.TypesTests('test_truth_values'))
74+
suite.addTest(test.test_types.TypesTests('test_type_function'))
75+
suite.addTest(test.test_types.TypesTests('test_zero_division'))
76+
return suite
77+
78+
else:
79+
return loader.loadTestsFromModule(test.test_types, pattern)
80+
81+
run_test(__name__)

0 commit comments

Comments
 (0)