Add tests for includeclass errors
parent
9802dd9f8f
commit
3e728c3899
|
@ -0,0 +1,253 @@
|
|||
(* TEST
|
||||
* expect
|
||||
*)
|
||||
|
||||
class type foo_t =
|
||||
object
|
||||
method foo: string
|
||||
end
|
||||
|
||||
module M: sig
|
||||
class type ct = object val m: string end
|
||||
end = struct
|
||||
class type ct = object end
|
||||
end
|
||||
|
||||
[%%expect{|
|
||||
class type foo_t = object method foo : string end
|
||||
Lines 8-10, characters 6-3:
|
||||
8 | ......struct
|
||||
9 | class type ct = object end
|
||||
10 | end
|
||||
Error: Signature mismatch:
|
||||
Modules do not match:
|
||||
sig class type ct = object end end
|
||||
is not included in
|
||||
sig class type ct = object val m : string end end
|
||||
Class type declarations do not match:
|
||||
class type ct = object end
|
||||
does not match
|
||||
class type ct = object val m : string end
|
||||
The first class type has no instance variable m
|
||||
|}]
|
||||
|
||||
module M: sig
|
||||
class c : object
|
||||
method a: string
|
||||
end
|
||||
end = struct
|
||||
class virtual c = object
|
||||
method virtual a: string
|
||||
end
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
Lines 5-9, characters 6-3:
|
||||
5 | ......struct
|
||||
6 | class virtual c = object
|
||||
7 | method virtual a: string
|
||||
8 | end
|
||||
9 | end
|
||||
Error: Signature mismatch:
|
||||
Modules do not match:
|
||||
sig class virtual c : object method virtual a : string end end
|
||||
is not included in
|
||||
sig class c : object method a : string end end
|
||||
Class declarations do not match:
|
||||
class virtual c : object method virtual a : string end
|
||||
does not match
|
||||
class c : object method a : string end
|
||||
A class cannot be changed from virtual to concrete
|
||||
|}]
|
||||
|
||||
class type ['a] ct = object val x: 'a end
|
||||
|
||||
module M: sig
|
||||
class type ['a] c = object end
|
||||
end = struct
|
||||
class type c = object end
|
||||
end
|
||||
;;
|
||||
|
||||
[%%expect{|
|
||||
class type ['a] ct = object val x : 'a end
|
||||
Lines 5-7, characters 6-3:
|
||||
5 | ......struct
|
||||
6 | class type c = object end
|
||||
7 | end
|
||||
Error: Signature mismatch:
|
||||
Modules do not match:
|
||||
sig class type c = object end end
|
||||
is not included in
|
||||
sig class type ['a] c = object end end
|
||||
Class type declarations do not match:
|
||||
class type c = object end
|
||||
does not match
|
||||
class type ['a] c = object end
|
||||
The classes do not have the same number of type parameters
|
||||
|}]
|
||||
|
||||
module M: sig
|
||||
class ['a] c: object constraint 'a = int end
|
||||
end = struct
|
||||
class ['a] c = object end
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
Lines 3-5, characters 6-3:
|
||||
3 | ......struct
|
||||
4 | class ['a] c = object end
|
||||
5 | end
|
||||
Error: Signature mismatch:
|
||||
Modules do not match:
|
||||
sig class ['a] c : object end end
|
||||
is not included in
|
||||
sig class ['a] c : object constraint 'a = int end end
|
||||
Class declarations do not match:
|
||||
class ['a] c : object end
|
||||
does not match
|
||||
class ['a] c : object constraint 'a = int end
|
||||
A type parameter has type 'a but is expected to have type int
|
||||
|}]
|
||||
|
||||
module M: sig
|
||||
class c : int -> object end
|
||||
end = struct
|
||||
class c (x : float) = object end
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
Lines 3-5, characters 6-3:
|
||||
3 | ......struct
|
||||
4 | class c (x : float) = object end
|
||||
5 | end
|
||||
Error: Signature mismatch:
|
||||
Modules do not match:
|
||||
sig class c : float -> object end end
|
||||
is not included in
|
||||
sig class c : int -> object end end
|
||||
Class declarations do not match:
|
||||
class c : float -> object end
|
||||
does not match
|
||||
class c : int -> object end
|
||||
A parameter has type float but is expected to have type int
|
||||
|}]
|
||||
|
||||
class virtual foo: foo_t =
|
||||
object
|
||||
method foo = "foo"
|
||||
method private virtual cast: int
|
||||
end
|
||||
;;
|
||||
|
||||
[%%expect{|
|
||||
Lines 2-5, characters 4-7:
|
||||
2 | ....object
|
||||
3 | method foo = "foo"
|
||||
4 | method private virtual cast: int
|
||||
5 | end
|
||||
Error: The class type object method foo : string end
|
||||
is not matched by the class type foo_t
|
||||
The virtual method cast cannot be hidden
|
||||
|}]
|
||||
|
||||
class type foo_t2 =
|
||||
object
|
||||
method private foo: string
|
||||
end
|
||||
|
||||
class foo: foo_t2 =
|
||||
object
|
||||
method foo = "foo"
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
class type foo_t2 = object method private foo : string end
|
||||
Lines 7-9, characters 4-7:
|
||||
7 | ....object
|
||||
8 | method foo = "foo"
|
||||
9 | end
|
||||
Error: The class type object method foo : string end
|
||||
is not matched by the class type foo_t2
|
||||
The public method foo cannot become private
|
||||
|}]
|
||||
|
||||
class virtual foo: foo_t =
|
||||
object
|
||||
method virtual foo: string
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
Lines 2-4, characters 4-7:
|
||||
2 | ....object
|
||||
3 | method virtual foo: string
|
||||
4 | end
|
||||
Error: The class type object method virtual foo : string end
|
||||
is not matched by the class type foo_t
|
||||
The virtual method foo cannot become concrete
|
||||
|}]
|
||||
|
||||
class type foo_t3 =
|
||||
object
|
||||
val mutable x : int
|
||||
end
|
||||
|
||||
class foo: foo_t3 =
|
||||
object
|
||||
val x = 1
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
class type foo_t3 = object val mutable x : int end
|
||||
Lines 7-9, characters 4-7:
|
||||
7 | ....object
|
||||
8 | val x = 1
|
||||
9 | end
|
||||
Error: The class type object val x : int end is not matched by the class type
|
||||
foo_t3
|
||||
The non-mutable instance variable x cannot become mutable
|
||||
|}]
|
||||
|
||||
class type foo_t4 =
|
||||
object
|
||||
val x : int
|
||||
end
|
||||
|
||||
class virtual foo: foo_t4 =
|
||||
object
|
||||
val virtual x : int
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
class type foo_t4 = object val x : int end
|
||||
Lines 7-9, characters 4-7:
|
||||
7 | ....object
|
||||
8 | val virtual x : int
|
||||
9 | end
|
||||
Error: The class type object val virtual x : int end
|
||||
is not matched by the class type foo_t4
|
||||
The virtual instance variable x cannot become concrete
|
||||
|}]
|
||||
|
||||
module M: sig
|
||||
class type c = object method m: string end
|
||||
end = struct
|
||||
class type c = object method private m: string end
|
||||
end
|
||||
;;
|
||||
[%%expect{|
|
||||
Lines 3-5, characters 6-3:
|
||||
3 | ......struct
|
||||
4 | class type c = object method private m: string end
|
||||
5 | end
|
||||
Error: Signature mismatch:
|
||||
Modules do not match:
|
||||
sig class type c = object method private m : string end end
|
||||
is not included in
|
||||
sig class type c = object method m : string end end
|
||||
Class type declarations do not match:
|
||||
class type c = object method private m : string end
|
||||
does not match
|
||||
class type c = object method m : string end
|
||||
The private method m cannot become public
|
||||
|}]
|
|
@ -32,3 +32,4 @@ typecore_nolabel_errors.ml
|
|||
typecore_empty_polyvariant_error.ml
|
||||
typetexp_errors.ml
|
||||
external_arity.ml
|
||||
includeclass_errors.ml
|
||||
|
|
Loading…
Reference in New Issue