Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 268 lines (227 sloc) 11.91 kb
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
1 use v6;
2 use Test;
3
2002a2fe » moritz
2012-01-30 more typed exceptions
4 #?DOES 1
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
5 sub throws_like($code, $ex_type, *%matcher) {
6ff177cf » moritz
2012-01-24 even nicer test output
6 my $msg;
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
7 if $code ~~ Callable {
6ff177cf » moritz
2012-01-24 even nicer test output
8 $msg = 'code dies';
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
9 $code()
10 } else {
6ff177cf » moritz
2012-01-24 even nicer test output
11 $msg = "'$code' died";
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
12 eval $code;
13 }
6ff177cf » moritz
2012-01-24 even nicer test output
14 ok 0, $msg;
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
15 skip 'Code did not die, can not check exception', 1 + %matcher.elems;
16 CATCH {
17 default {
6ff177cf » moritz
2012-01-24 even nicer test output
18 ok 1, $msg;
4c68d1a5 » moritz
2011-12-18 skipped tests for X::Obsolete
19 my $type_ok = $_.WHAT === $ex_type;
20 ok $type_ok , "right exception type ({$ex_type.^name})";
21 if $type_ok {
22 for %matcher.kv -> $k, $v {
8d41f565 » moritz
2012-01-24 more typed exception tests, better diagnosis
23 my $got = $_."$k"();
24 my $ok = $got ~~ $v,;
5e0af50d » moritz
2012-04-03 [throws_like] avoid undef warnings for matchers
25 ok $ok, ".$k matches {$v.defined ?? $v !! $v.gist}";
8d41f565 » moritz
2012-01-24 more typed exception tests, better diagnosis
26 unless $ok {
27 diag "Got: $got\n"
28 ~"Expected: $v";
29 }
4c68d1a5 » moritz
2011-12-18 skipped tests for X::Obsolete
30 }
31 } else {
8d41f565 » moritz
2012-01-24 more typed exception tests, better diagnosis
32 diag "Got: {$_.WHAT.gist}\n"
33 ~"Expected: {$ex_type.gist}";
6467df25 » moritz
2012-02-23 test X::Attribute::Package and X::Attribute::NoPackage
34 diag "Exception message: $_.message()";
4c68d1a5 » moritz
2011-12-18 skipped tests for X::Obsolete
35 skip 'wrong exception type', %matcher.elems;
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
36 }
37 }
38 }
39 }
40
88dbaa76 » moritz
2012-05-27 X::Buf::Pack
41 throws_like { Buf.new().Str }, X::Buf::AsStr, method => 'Str';;
42 throws_like 'pack("B", 1)', X::Buf::Pack, directive => 'B';
43 throws_like 'Buf.new.unpack("B")', X::Buf::Pack, directive => 'B';
67636640 » moritz
2012-02-11 fix test for X::Attribute::Undeclared
44 throws_like 'my class Foo { method a() { $!bar } }', X::Attribute::Undeclared,
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
45 name => '$!bar', package-name => 'Foo';
46 throws_like 'sub f() { $^x }', X::Signature::Placeholder,
47 line => 1;
48
4c68d1a5 » moritz
2011-12-18 skipped tests for X::Obsolete
49 #?rakudo skip 'parsing of $& and other p5 variables'
9fb1b22e » moritz
2012-03-27 test for qr obsoletion message
50 throws_like '$&', X::Obsolete, old => '$@ variable', replacement => '$, rx/<<rx>>// or $()';
51 throws_like 'qr/a/', X::Obsolete, old => rx/<<qr>>/, replacement => rx/<<rx>>/;
4c68d1a5 » moritz
2011-12-18 skipped tests for X::Obsolete
52
f52c2ed5 » moritz
2012-01-23 test presence of placeholder attribute of X::Placeholder::Block excep…
53 throws_like 'do { $^x }', X::Placeholder::Block, placeholder => '$^x';
54 throws_like 'do { @_ }', X::Placeholder::Block, placeholder => '@_';
55 throws_like 'class { $^x }', X::Placeholder::Block, placeholder => '$^x';
8d41f565 » moritz
2012-01-24 more typed exception tests, better diagnosis
56 throws_like '$^x', X::Placeholder::Mainline, placeholder => '$^x';
d5ac5a66 » moritz
2012-02-03 RT #73502, @_ in the mainline
57 # RT #73502
58 throws_like '@_', X::Placeholder::Mainline, placeholder => '@_';
bea87e2b » moritz
2012-03-04 RT #85942
59 # RT #85942
60 throws_like '"foo".{ say $^a }', X::Placeholder::Mainline;
61
62
8d41f565 » moritz
2012-01-24 more typed exception tests, better diagnosis
63 throws_like 'sub f(*@a = 2) { }', X::Parameter::Default, how => 'slurpy';
64 throws_like 'sub f($x! = 3) { }', X::Parameter::Default, how => 'required';
65 throws_like 'sub f(:$x! = 3) { }', X::Parameter::Default, how => 'required';
66 throws_like 'sub f($:x) { }', X::Parameter::Placeholder,
67 parameter => '$:x',
68 right => ':$x';
69 throws_like 'sub f($?x) { }', X::Parameter::Twigil,
70 parameter => '$?x',
71 twigil => '?';
a97dc2a5 » moritz
2012-01-26 track change of error class names; add some more redeclaration tests
72 throws_like 'sub (Int Str $x) { }', X::Parameter::MultipleTypeConstraints;
8d41f565 » moritz
2012-01-24 more typed exception tests, better diagnosis
73
74
75
a97dc2a5 » moritz
2012-01-26 track change of error class names; add some more redeclaration tests
76 # some of these redeclaration errors take different code
77 # paths in rakudo, so we over-test a bit to catch them all,
78 # even if the tests look rather boring;
0b7d7d24 » moritz
2012-01-23 more typed exception tests
79 throws_like 'my @a; my @a', X::Redeclaration, symbol => '@a';
80 throws_like 'sub a { }; sub a { }',X::Redeclaration, symbol => 'a', what => 'routine';
dddf1116 » moritz
2012-05-29 RT #78370, my &a; sub a { } redeclaration error
81 # RT #78370
cf0e3428 » moritz
2012-05-29 oops, meant to test something else
82 #?rakudo skip 'RT 78370'
83 throws_like 'my &a; multi a { }', X::Redeclaration, symbol => 'a', what => 'routine';
63626c2d » moritz
2012-02-08 another redeclaration test
84 throws_like 'sub a { }; multi sub a { }',X::Redeclaration, symbol => 'a', what => 'routine';
a97dc2a5 » moritz
2012-01-26 track change of error class names; add some more redeclaration tests
85 throws_like 'my class A { }; my class A { }', X::Redeclaration, symbol => 'A';
c9e36113 » moritz
2012-04-14 more robust name clash tests
86 throws_like 'my class B { }; my subset B of Any;', X::Redeclaration, symbol => 'B';
a97dc2a5 » moritz
2012-01-26 track change of error class names; add some more redeclaration tests
87 throws_like 'CATCH { }; CATCH { }', X::Phaser::Multiple, block => 'CATCH';
fbb78ed5 » moritz
2012-01-23 test for X::Placeholder::Block
88
6467df25 » moritz
2012-02-23 test X::Attribute::Package and X::Attribute::NoPackage
89 throws_like 'my class A { my @a; @a!List::foo() }',
c01e5d67 » moritz
2012-01-24 tests for typed private method call exceptions
90 X::Method::Private::Permission,
91 method => 'foo',
92 calling-package => 'A',
93 source-package => 'List';
94
95 throws_like '1!foo()',
a97dc2a5 » moritz
2012-01-26 track change of error class names; add some more redeclaration tests
96 X::Method::Private::Unqualified,
c01e5d67 » moritz
2012-01-24 tests for typed private method call exceptions
97 method => 'foo';
98
c6df8c59 » moritz
2012-05-27 update and expand tests for binding to unbindable stuff
99 throws_like 'sub f() { }; f() := 2', X::Bind::Comp;
a8246984 » moritz
2012-01-25 typed binding excpetions
100 throws_like 'my int $x := 2', X::Bind::NativeType;
c6df8c59 » moritz
2012-05-27 update and expand tests for binding to unbindable stuff
101 throws_like 'my @a; @a[] := <foo bar baz>', X::Bind::ZenSlice, type => Array;
102 throws_like 'my %a; %a{} := foo=>1, bar=>2, baz=>3', X::Bind::ZenSlice, type => Hash;
103 throws_like 'my @a; @a[0, 1] := (2, 3)', X::Bind::Slice, type => Array;
104 throws_like 'my %a; %a<a b> := (2, 3)', X::Bind::Slice, type => Hash;
709242e4 » timo
2012-03-29 tests for X::Bind::ZenSlice.
105
a8246984 » moritz
2012-01-25 typed binding excpetions
106
dc765ebb » moritz
2012-01-25 tests for typed exceptions
107 throws_like 'for (1; 1; 1) { }', X::Obsolete,
108 old => rx/<<for>>/,
109 replacement => rx/<<loop>>/;
110 throws_like 'foreach (1..10) { }', X::Obsolete,
111 old => "'foreach'",
112 replacement => "'for'";
113 throws_like 'undef', X::Obsolete,
114 old => rx/<<undef>>/;
115
a97dc2a5 » moritz
2012-01-26 track change of error class names; add some more redeclaration tests
116 throws_like 'my $a::::b', X::Syntax::Name::Null;
d1f0fd85 » moritz
2012-01-28 tests for typed syntax errors
117 throws_like 'unless 1 { } else { }', X::Syntax::UnlessElse;
118 throws_like 'for my $x (1, 2, 3) { }', X::Syntax::P5;
119 throws_like ':!foo(3)', X::Syntax::NegatedPair;
120 throws_like 'my $0', X::Syntax::Variable::Numeric;
b2914792 » moritz
2012-02-24 test parameter variant of X::Syntax::Variable::Numeric
121 throws_like 'my sub f($0) { }', X::Syntax::Variable::Numeric, what => 'parameter';
d1f0fd85 » moritz
2012-01-28 tests for typed syntax errors
122 throws_like 'my $<a>', X::Syntax::Variable::Match;
33e961e4 » moritz
2012-01-30 RT #69230, my $!foo
123 throws_like 'my class A { my $!foo }', X::Syntax::Variable::Twigil, twigil => '!', scope => 'my';
d9f7caae » moritz
2012-05-03 RT #112724, line numbers from warnings
124 throws_like 'my $?FILE', X::Syntax::Variable::Twigil, twigil => '?', scope => 'my';
277e13dd » moritz
2012-01-28 more tests for typed syntax errors
125 throws_like 'my $::("foo")', X::Syntax::Variable::IndirectDeclaration;
171ad0a8 » moritz
2012-02-07 test X::Undeclared
126 throws_like '@a', X::Undeclared, symbol => '@a';
277e13dd » moritz
2012-01-28 more tests for typed syntax errors
127 throws_like 'augment class Any { }', X::Syntax::Augment::WithoutMonkeyTyping;
128 throws_like 'use MONKEY_TYPING; augment role Positional { }', X::Syntax::Augment::Role;
fd201d9a » moritz
2012-04-05 RT #82984
129 throws_like 'sub postbla:sym<foo>() { }', X::Syntax::Extension::Category, category => 'postbla';
ab9c613e » moritz
2012-05-29 RT #83992, proper error message for infix in term position
130 # RT #83992
131 throws_like 'my @a = 1, => 2', X::Syntax::InfixInTermPosition, infix => '=>';
840bfdaa » moritz
2012-05-13 test for X::Signature::NameClash
132 throws_like 'sub f(:in(:$in)) { }', X::Signature::NameClash, name => 'in';
296a529c » timo
2012-03-29 test for X::Does::TypeObject raising for 'does' operator.
133 throws_like 'my $foo does &Int', X::Does::TypeObject;
134 throws_like 'my $foo does &Int, &Bool', X::Does::TypeObject;
104f5224 » timo
2012-03-29 add tests for X::Role::Initialization.
135 throws_like 'role R { }; 99 but R("wrong");', X::Role::Initialization;
136 throws_like 'role R { has $.x; has $.y }; 99 but R("wrong");', X::Role::Initialization;
137 throws_like 'role R { }; 99 does R("wrong");', X::Role::Initialization;
138 throws_like 'role R { has $.x; has $.y }; 99 does R("wrong");', X::Role::Initialization;
277e13dd » moritz
2012-01-28 more tests for typed syntax errors
139
140 throws_like 'sub f($a?, $b) { }', X::Parameter::WrongOrder,
141 misplaced => 'required',
142 after => 'optional';
143 throws_like 'sub f(*@a, $b) { }', X::Parameter::WrongOrder,
144 misplaced => 'required',
145 after => 'variadic';
146 throws_like 'sub f(*@a, $b?) { }', X::Parameter::WrongOrder,
147 misplaced => 'optional positional',
148 after => 'variadic';
03faea74 » moritz
2012-01-26 X::Syntax::Name::NotNull
149
2002a2fe » moritz
2012-01-30 more typed exceptions
150 #?rakudo skip 'parsing regression'
151 throws_like '#`', X::Syntax::Comment::Embedded;
1af5f7a9 » moritz
2012-03-02 RT #71814, =begin without identifier
152 # RT #71814
153 throws_like "=begin\n", X::Syntax::Pod::BeginWithoutIdentifier, line => 1, filename => rx/eval/;
2002a2fe » moritz
2012-01-30 more typed exceptions
154
155 throws_like '@', X::Syntax::SigilWithoutName;
156 throws_like '1∞', X::Syntax::Confused;
e4dee679 » moritz
2012-02-23 X::Syntax::Missing
157 throws_like 'for 1, 2', X::Syntax::Missing, what => 'block';
a78af8ce » moritz
2012-02-24 X::Syntax::Reserved
158 throws_like 'my @a()', X::Syntax::Reserved, reserved => /shape/ & /array/;
159 throws_like 'my &a()', X::Syntax::Reserved, instead => /':()'/;
2002a2fe » moritz
2012-01-30 more typed exceptions
160
59f3f35d » moritz
2012-02-08 test exception type for stuff that must be known at compile time
161 throws_like 'm:i(@*ARGS[0])/foo/', X::Value::Dynamic;
162 throws_like 'my enum Foo (:x(@*ARGS[0]))', X::Value::Dynamic;
163
5c0802db » moritz
2012-02-11 more exception tests
164 throws_like 'self', X::Syntax::Self::WithoutObject;
478ed38d » moritz
2012-02-11 more tests for availabilty-of-self related errors
165 throws_like 'class { has $.x = $.y }', X::Syntax::VirtualCall, call => '$.y';
166 throws_like '$.a', X::Syntax::NoSelf, variable => '$.a';
5c0802db » moritz
2012-02-11 more exception tests
167
6467df25 » moritz
2012-02-23 test X::Attribute::Package and X::Attribute::NoPackage
168 throws_like 'has $.x', X::Attribute::NoPackage;
169 throws_like 'my module A { has $.x }', X::Attribute::Package, package-type => 'module';
170
46f9b17d » moritz
2012-03-08 track exception name change, and add another test
171 throws_like 'has sub a() { }', X::Declaration::Scope, scope => 'has', declaration => 'sub';
172 throws_like 'has package a { }', X::Declaration::Scope, scope => 'has', declaration => 'package';
eb6edd64 » moritz
2012-03-15 test X::Declaration::Scope::Multi
173 throws_like 'our multi a() { }', X::Declaration::Scope::Multi, scope => 'our';
a2b6fc20 » moritz
2012-02-23 more typed exceptions
174 throws_like 'multi sub () { }', X::Anon::Multi, multiness => 'multi';
175 throws_like 'proto sub () { }', X::Anon::Multi, multiness => 'proto';
3b9a6049 » moritz
2012-02-23 more typed exceptions
176 throws_like 'class { multi method () { }}', X::Anon::Multi, routine-type => 'method';
5065e35d » moritz
2012-02-23 test X::Anon::Augment
177 throws_like 'use MONKEY_TYPING; augment class { }', X::Anon::Augment, package-type => 'class';
3804629e » moritz
2012-02-23 test X::Augment::NoSuchType
178 throws_like 'use MONKEY_TYPING; augment class NoSuchClass { }', X::Augment::NoSuchType,
179 package-type => 'class',
180 package => 'NoSuchClass';
c9e36113 » moritz
2012-04-14 more robust name clash tests
181 throws_like 'use MONKEY_TYPING; augment class No::Such::Class { }', X::Augment::NoSuchType,
182 package => 'No::Such::Class';
3b9a6049 » moritz
2012-02-23 more typed exceptions
183
184 throws_like ':45<abcd>', X::Syntax::Number::RadixOutOfRange, radix => 45;
3dab5c0c » moritz
2012-03-30 RT #112056
185 throws_like ':0<0>', X::Syntax::Number::RadixOutOfRange, message => rx/0/;
dc3de2d6 » moritz
2012-02-24 X::Syntax::Regex::Adverb
186 throws_like 'rx:g/a/', X::Syntax::Regex::Adverb, adverb => 'g', construct => 'rx';
26f68343 » moritz
2012-02-26 X::Syntax::Signature::InvocantMarker
187 throws_like 'my sub f($x, $y:) { }', X::Syntax::Signature::InvocantMarker;
a2b6fc20 » moritz
2012-02-23 more typed exceptions
188
1bf4f1dc » moritz
2012-02-26 X::OutOfRange
189 throws_like 'Date.new("2012-02-30")', X::OutOfRange,
190 range => Range, message => rx/<<1\.\.29>>/;
58512ac3 » moritz
2012-04-04 test index out of range exception
191 throws_like 'use fatal; "foo"[2]', X::OutOfRange, what => rx:i/index/, range => 0..0, got => 2;
1bf4f1dc » moritz
2012-02-26 X::OutOfRange
192
52f6db64 » moritz
2012-02-27 test for X::Routine::Unwrap
193 throws_like 'sub f() { }; &f.unwrap("foo")', X::Routine::Unwrap;
44d0aa37 » moritz
2012-02-27 test X::Constructor::Positional
194 throws_like 'Mu.new(1)', X::Constructor::Positional;
39b3eb78 » Siddhant
2012-02-28 add test for X::Hash::Store::Oddnumber
195 throws_like 'my %h = 1', X::Hash::Store::OddNumber;
52f6db64 » moritz
2012-02-27 test for X::Routine::Unwrap
196
fcd16681 » moritz
2012-03-02 Test for proper error of "sub foo;", RT #68710 and RT #111492
197 # TOOD: might be X::Syntax::Malformed too...
198 throws_like 'sub foo;', X::Syntax::Missing, what => 'block';
157d7b7c » moritz
2012-03-03 more tests for "constant" parse errors
199 throws_like 'constant foo;', X::Syntax::Missing, what => /initializer/;
200 throws_like 'constant * = 3;', X::Syntax::Missing, what => /constant/;
fcd16681 » moritz
2012-03-02 Test for proper error of "sub foo;", RT #68710 and RT #111492
201
ddc21bfd » moritz
2012-03-08 test X::Package::Stubbed
202 throws_like 'class A {...}; grammar B { ... }', X::Package::Stubbed, packages => <A B>;
203
98312337 » moritz
2012-03-18 track phaser error changes in rakudo
204 throws_like 'my sub a { PRE 0 }; a()', X::Phaser::PrePost, phaser => 'PRE', condition => /0/;
205 throws_like 'my sub a { POST 0 }; a()', X::Phaser::PrePost, phaser => 'POST', condition => /0/;
efa96102 » moritz
2012-03-18 typed exceptions for PRE/POST failures
206
d720afa0 » moritz
2012-03-25 test that Str numification error message survives through infix:<+>
207 throws_like 'use fatal; my $x = "5 foo" + 8;', X::Str::Numeric, source => '5 foo', pos => 1,
208 reason => /trailing/;
209
d701cfa9 » moritz
2012-05-27 text X::Method::NotFound on normal and .+ dispatches
210 throws_like '1.foo', X::Method::NotFound, method => 'foo', typename => 'Int';
211 throws_like '1.+foo', X::Method::NotFound, method => 'foo', typename => 'Int';
16238cd7 » moritz
2012-05-27 test private method not found error
212 throws_like 'my class Priv { method x { self!foo } }; Priv.x',
213 X::Method::NotFound,
214 method => '!foo',
215 typename => 'Priv',
216 private => { $_ === True };
eff5942a » moritz
2012-05-27 more typed exception tests (X::ControlFlow, X::Method::InvalidQualifier)
217 throws_like '1.List::join', X::Method::InvalidQualifier,
218 method => 'join',
219 invocant => 1,
220 qualifier-type => List;
d701cfa9 » moritz
2012-05-27 text X::Method::NotFound on normal and .+ dispatches
221
903dffc1 » moritz
2012-03-30 test that stubby exception generators can take an argument
222 # RT #58558
223 throws_like '!!! 42', X::AdHoc, payload => 42;
224 throws_like 'use fatal; ... 42', X::AdHoc, payload => 42;
225 {
226 my $c = 0;
227 try {
228 ??? 42;
229 CONTROL { default { $c++ } }
230 }
231 is $c, 1, '??? with argument warns';
232 }
233
ca3a210c » moritz
2012-03-31 $!.backtrace generates a Backtrace
234 throws_like 'die "foo"', X::AdHoc, backtrace => Backtrace;
2365690f » moritz
2012-04-05 RT #98678, error message for failed sequence deduction
235 throws_like 'use fatal; ~(1, 2, 6 ... 10)', X::Sequence::Deduction;
903dffc1 » moritz
2012-03-30 test that stubby exception generators can take an argument
236
cb7e9883 » moritz
2012-05-15 test X::TypeCheck::Binding and X::TypeCheck::Return
237 throws_like 'my Str $x := 3', X::TypeCheck::Binding, got => Int, expected => Str;
238 throws_like 'sub f() returns Str { 5 }; f', X::TypeCheck::Return, got => Int, expected => Str;
239
b585e672 » moritz
2012-05-17 test for method not found exception
240 throws_like '1.foo', X::Method::NotFound, method => 'foo', typename => 'Int';
5a8433b1 » moritz
2012-05-27 test X::Mixin::NonComposable
241 throws_like 'my class NC { }; NC.new does NC', X::Mixin::NonComposable,
242 :target(*.defined), :rolish(*.^name eq 'NC');
243 throws_like 'my class NC { }; NC.new but NC', X::Mixin::NonComposable,
244 :target(*.defined), :rolish(*.^name eq 'NC');
245
eff5942a » moritz
2012-05-27 more typed exception tests (X::ControlFlow, X::Method::InvalidQualifier)
246 throws_like 'last', X::ControlFlow,
247 illegal => 'last', enclosing => 'loop construct';
248 throws_like 'next', X::ControlFlow,
249 illegal => 'next', enclosing => 'loop construct';
250 throws_like 'redo', X::ControlFlow,
251 illegal => 'redo', enclosing => 'loop construct';
b585e672 » moritz
2012-05-17 test for method not found exception
252
c1474546 » moritz
2012-05-28 test X::Inheritance::Unsupported
253 throws_like 'my package A { }; my class B is A { }', X::Inheritance::Unsupported;
d701cfa9 » moritz
2012-05-27 text X::Method::NotFound on normal and .+ dispatches
254
5eefbf8f » moritz
2012-05-28 test X::Export::NameClash
255 throws_like 'my module Expo { sub f is export { }; { sub f is export { } } }',
256 X::Export::NameClash, symbol => '&f';
257
78d560a7 » moritz
2012-05-28 test for X::HyperOp::NonDWIM
258 #?rakudo skip 'segfaults'
259 throws_like '<a b> »+« <c>', X::HyperOp::NonDWIM,
260 left-elems => 2, right-elems => 1,
261 operator => { .name eq 'infix:<+>' };
262
263 throws_like '<a b> »+« <c>', X::HyperOp::NonDWIM,
264 left-elems => 2, right-elems => 1;
265
e708a8cb » moritz
2012-05-29 test X::ControlFlow::Return
266 throws_like 'my sub f() { gather { return } }; ~f()', X::ControlFlow::Return;
267
3d3f9a24 » moritz
2011-12-17 initial tests for typed exceptions; very unstructured for now
268 done;
Something went wrong with that request. Please try again.