Skip to content

Commit 6ebd657

Browse files
committed
[GR-23218] Make test_descr pass.
PullRequest: graalpython/1061
2 parents 3e0b1b9 + 817f30d commit 6ebd657

File tree

8 files changed

+135
-6
lines changed

8 files changed

+135
-6
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_dict.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,18 @@ def test_init3():
165165
assert False, "expected ValueError"
166166
except ValueError as e:
167167
assert "dictionary update sequence element #4 has length 1; 2 is required" == str(e), "invalid error message"
168+
169+
try:
170+
dict("5")
171+
assert False, "expected ValueError"
172+
except ValueError as e:
173+
assert "dictionary update sequence element #0 has length 1; 2 is required" == str(e), "invalid error message"
174+
175+
try:
176+
dict([("a", 1), ("b", 2), ("c", 3), ("d", 4), "5"])
177+
assert False, "expected ValueError"
178+
except ValueError as e:
179+
assert "dictionary update sequence element #4 has length 1; 2 is required" == str(e), "invalid error message"
168180

169181

170182
def test_init4():
@@ -198,7 +210,13 @@ def __len__(self):
198210
assert set(d.keys()) == key_set, "unexpected keys: %s" % str(d.keys())
199211
assert set(d.values()) == {97, 98, 99, 100}, "unexpected values: %s" % str(d.values())
200212

201-
213+
def test_init6():
214+
try:
215+
dict(1)
216+
assert False, "expected TypeError"
217+
except TypeError as e:
218+
assert "'int' object is not iterable" == str(e), "invalid error message"
219+
202220
def test_init_kwargs():
203221
kwargs = {'ONE': 'one', 'TWO': 'two'}
204222
d = dict([(1, 11), (2, 22)], **kwargs)

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_descr.txt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,65 @@
22
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_assign_slice
33
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_binary_operator_override
44
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_bpo25750
5+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_buffer_inheritance
6+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_builtin_function_or_method
7+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_classic_comparisons
8+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_classmethods_in_c
9+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_compattr
10+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_consistency_with_epg
11+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_copy_setstate
12+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_deepcopy_recursive
13+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_diamond_inheritance
14+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_dict_constructors
15+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_doc_descriptor
16+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_dynamics
17+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_evil_type_name
18+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_ex5_from_c3_switch
19+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_file_fault
20+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_hash_inheritance
21+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_imul_bug
22+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_init
23+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_ipow
24+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_isinst_isclass
25+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_meth_class_get
26+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_methods_in_c
27+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_mixing_slot_wrappers
28+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_monotonicity
29+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_mro_disagreement
30+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_multiple_inheritance
31+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_mutable_names
32+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_newslots
33+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_not_implemented
34+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_object_class
35+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_proxy_super
36+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_python_dicts
37+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_python_lists
38+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_recursive_call
39+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_refleaks_in_classmethod___init__
40+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_refleaks_in_staticmethod___init__
41+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_repr_as_str
42+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_rich_comparisons
43+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_rmul
44+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_set_and_no_get
45+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_slices
46+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_slots_descriptor
47+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_slots_trash
48+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_special_unbound_method_types
49+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_specials
50+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_staticmethods_in_c
51+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_str_of_str_subclass
52+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_str_subclass_as_dict_key
53+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_subclass_propagation
54+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_testcapi_no_segfault
55+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_vicious_descriptor_nonsense
56+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_weakref_segfault
57+
*graalpython.lib-python.3.test.test_descr.ClassPropertiesAndMethods.test_wrapper_segfault
58+
*graalpython.lib-python.3.test.test_descr.DictProxyTests.test_dict_type_with_metaclass
59+
*graalpython.lib-python.3.test.test_descr.DictProxyTests.test_repr
60+
*graalpython.lib-python.3.test.test_descr.MroTest.test_incomplete_extend
61+
*graalpython.lib-python.3.test.test_descr.MroTest.test_incomplete_set_bases_on_self
62+
*graalpython.lib-python.3.test.test_descr.MroTest.test_incomplete_super
63+
*graalpython.lib-python.3.test.test_descr.MroTest.test_reent_set_bases_on_direct_base
564
*graalpython.lib-python.3.test.test_descr.OperatorsTest.test_complexes
665
*graalpython.lib-python.3.test.test_descr.OperatorsTest.test_dicts
766
*graalpython.lib-python.3.test.test_descr.OperatorsTest.test_explicit_reverse_methods
@@ -11,3 +70,5 @@
1170
*graalpython.lib-python.3.test.test_descr.OperatorsTest.test_spam_dicts
1271
*graalpython.lib-python.3.test.test_descr.OperatorsTest.test_spam_lists
1372
*graalpython.lib-python.3.test.test_descr.OperatorsTest.test_wrap_lenfunc_bad_cast
73+
*graalpython.lib-python.3.test.test_descr.PTypesLongInitTest.test_pytype_long_ready
74+
*graalpython.lib-python.3.test.test_descr.SharedKeyTests.test_subclasses

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BinasciiModuleBuiltins.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.oracle.graal.python.builtins.Builtin;
5151
import com.oracle.graal.python.builtins.CoreFunctions;
5252
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
53+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
5354
import com.oracle.graal.python.builtins.PythonBuiltins;
5455
import com.oracle.graal.python.builtins.objects.PNone;
5556
import com.oracle.graal.python.builtins.objects.array.PArray;
@@ -362,6 +363,11 @@ PBytes b2a(PArray data,
362363
return b2a(toByteArray.execute(data.getSequenceStorage()));
363364
}
364365

366+
@Fallback
367+
PBytes b2a(Object data) {
368+
throw raise(TypeError, ErrorMessages.BYTESLIKE_OBJ_REQUIRED, data);
369+
}
370+
365371
@TruffleBoundary
366372
private PBytes b2a(byte[] bytes) {
367373
byte[] output = new byte[bytes.length * 2];

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1675,6 +1675,12 @@ Object doNativeObjectIndirect(PythonNativeClass self, Object[] varargs, PKeyword
16751675
return callNativeGenericNewNode(self, varargs, kwargs);
16761676
}
16771677

1678+
@SuppressWarnings("unused")
1679+
@Fallback
1680+
Object fallback(Object o, Object[] varargs, PKeyword[] kwargs) {
1681+
throw raise(TypeError, ErrorMessages.IS_NOT_TYPE_OBJ, "object.__new__(X): X", o);
1682+
}
1683+
16781684
private static PythonNativeClass findFirstNativeBaseClass(PythonAbstractClass[] methodResolutionOrder) {
16791685
for (PythonAbstractClass cls : methodResolutionOrder) {
16801686
if (PGuards.isNativeClass(cls)) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/BytesBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ boolean contains(VirtualFrame frame, PByteArray self, Object other,
569569

570570
@Fallback
571571
boolean contains(@SuppressWarnings("unused") Object self, Object other) {
572-
throw raise(TypeError, ErrorMessages.BYTES_OBJ_REQUIRED, other);
572+
throw raise(TypeError, ErrorMessages.BYTESLIKE_OBJ_REQUIRED, other);
573573
}
574574

575575
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DictBuiltins.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
7474
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
7575
import com.oracle.graal.python.nodes.ErrorMessages;
76+
import com.oracle.graal.python.nodes.PGuards;
7677
import com.oracle.graal.python.nodes.PRaiseNode;
7778
import com.oracle.graal.python.nodes.SpecialMethodNames;
7879
import static com.oracle.graal.python.nodes.SpecialMethodNames.__MISSING__;
@@ -92,6 +93,7 @@
9293
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
9394
import com.oracle.graal.python.runtime.PythonCore;
9495
import com.oracle.graal.python.runtime.exception.PException;
96+
import static com.oracle.graal.python.runtime.exception.PythonErrorType.ValueError;
9597
import com.oracle.graal.python.runtime.sequence.PSequence;
9698
import com.oracle.truffle.api.CompilerDirectives;
9799
import com.oracle.truffle.api.dsl.Cached;
@@ -134,13 +136,28 @@ private HashingStorage.InitNode getInitNode() {
134136
return initNode;
135137
}
136138

137-
@Specialization(guards = "args.length == 1")
139+
@Specialization(guards = {"args.length == 1", "firstArgIterable(args, lib)", "!firstArgString(args)"})
138140
Object doVarargs(VirtualFrame frame, PDict self, Object[] args, PKeyword[] kwargs,
139-
@Cached SetDictStorageNode setStorage) {
141+
@Cached SetDictStorageNode setStorage,
142+
@SuppressWarnings("unused") @CachedLibrary(limit = "1") PythonObjectLibrary lib) {
140143
setStorage.execute(self, getInitNode().execute(frame, args[0], kwargs));
141144
return PNone.NONE;
142145
}
143146

147+
@SuppressWarnings("unused")
148+
@Specialization(guards = {"args.length == 1", "!firstArgIterable(args, lib)"})
149+
Object doVarargsNotIterable(Object self, Object[] args, @SuppressWarnings("unused") PKeyword[] kwargs,
150+
@CachedLibrary(limit = "1") PythonObjectLibrary lib) {
151+
throw raise(TypeError, ErrorMessages.OBJ_NOT_ITERABLE, args[0]);
152+
}
153+
154+
@SuppressWarnings("unused")
155+
@Specialization(guards = {"args.length == 1", "firstArgString(args)"})
156+
Object doString(Object self, Object[] args, PKeyword[] kwargs,
157+
@Cached PRaiseNode raise) {
158+
throw raise.raise(ValueError, ErrorMessages.DICT_UPDATE_SEQ_ELEM_HAS_LENGTH_2_REQUIRED, 0, 1);
159+
}
160+
144161
@Specialization(guards = "args.length == 0")
145162
Object doKeywords(VirtualFrame frame, PDict self, @SuppressWarnings("unused") Object[] args, PKeyword[] kwargs,
146163
@Cached SetDictStorageNode setStorage) {
@@ -152,6 +169,14 @@ Object doKeywords(VirtualFrame frame, PDict self, @SuppressWarnings("unused") Ob
152169
Object doGeneric(@SuppressWarnings("unused") PDict self, Object[] args, @SuppressWarnings("unused") PKeyword[] kwargs) {
153170
throw raise(TypeError, ErrorMessages.EXPECTED_AT_MOST_D_ARGS_GOT_D, "dict", 1, args.length);
154171
}
172+
173+
protected boolean firstArgIterable(Object[] args, PythonObjectLibrary lib) {
174+
return lib.isIterable(args[0]);
175+
}
176+
177+
protected boolean firstArgString(Object[] args) {
178+
return PGuards.isString(args[0]);
179+
}
155180
}
156181

157182
// setdefault(key[, default])

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeNodes.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252

5353
import com.oracle.graal.python.PythonLanguage;
5454
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
55+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
5556
import com.oracle.graal.python.builtins.objects.PNone;
5657
import com.oracle.graal.python.builtins.objects.cext.CExtNodes;
5758
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.GetTypeMemberNode;
@@ -773,10 +774,22 @@ private static PythonAbstractClass[] mergeMROs(MROMergeState[] toMerge, List<Pyt
773774
idx = -1;
774775
}
775776

777+
List<PythonAbstractClass> notMerged = new ArrayList<>();
776778
for (MROMergeState mergee : toMerge) {
777779
if (!mergee.isMerged()) {
778-
throw new IllegalStateException();
780+
PythonAbstractClass candidate = mergee.getCandidate();
781+
if (!notMerged.contains(candidate)) {
782+
notMerged.add(candidate);
783+
}
784+
}
785+
}
786+
if (!notMerged.isEmpty()) {
787+
Iterator<PythonAbstractClass> it = notMerged.iterator();
788+
StringBuilder bases = new StringBuilder(GetNameNode.doSlowPath(it.next()));
789+
while (it.hasNext()) {
790+
bases.append(", ").append(GetNameNode.doSlowPath(it.next()));
779791
}
792+
throw PRaiseNode.getUncached().raise(TypeError, ErrorMessages.CANNOT_GET_CONSISTEMT_METHOD_RESOLUTION, bases);
780793
}
781794

782795
return mro.toArray(new PythonAbstractClass[mro.size()]);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/ErrorMessages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ public abstract class ErrorMessages {
8787
public static final String BYTE_STR_IS_TOO_LARGE = "byte string is too large";
8888
public static final String BYTEARRAY_OUT_OF_BOUNDS = "bytearray index out of range";
8989
public static final String BYTEORDER_MUST_BE_LITTLE_OR_BIG = "byteorder must be either 'little' or 'big'";
90-
public static final String BYTES_OBJ_REQUIRED = "a bytes-like object is required, not '%p'";
9190
public static final String BYTESLIKE_OBJ_REQUIRED = "a bytes-like object is required, not '%p'";
9291
public static final String C_ARG_NOT_IN_RANGE = "%c arg not in range(0x%s)";
9392
public static final String CALL_STACK_NOT_DEEP_ENOUGH = "call stack is not deep enough";
@@ -118,6 +117,7 @@ public abstract class ErrorMessages {
118117
public static final String CANNOT_CREATE_WEAK_REFERENCE_TO = "cannot create weak reference to '%p' object";
119118
public static final String CANNOT_DELETE_ATTRIBUTE = "can't delete %s.%s";
120119
public static final String CANNOT_GET_SHAPE_OF_NATIVE_CLS = "cannot get shape of native class";
120+
public static final String CANNOT_GET_CONSISTEMT_METHOD_RESOLUTION = "Cannot create a consistent method resolution order (MRO) for bases %p, %p";
121121
public static final String CANNOT_HANDLE_ZIP_FILE = "cannot handle Zip file: '%s'";
122122
public static final String CANNOT_IMPORT_NAME = "cannot import name '%s'";
123123
public static final String CANNOT_INITIALIZE_WITH = "cannot initialize %s with %s%s";

0 commit comments

Comments
 (0)