1--TEST--
2Test that calling DatePeriod::__unserialize() directly with wrong argument type throws
3--FILE--
4<?php
5
6$start = new DateTime("2022-07-14 00:00:00", new DateTimeZone("UTC"));
7$interval = new DateInterval('P1D');
8$end = new DateTime("2022-07-16 00:00:00", new DateTimeZone("UTC"));
9$period = new DatePeriod($start, $interval, $end);
10
11try {
12    $period->__unserialize(
13        [
14            "current" => new DateTime,
15            "start" => new DateTime,
16            "end" => new DateTime,
17            "interval" => new DateInterval('P2D'),
18            "recurrences" => 2,
19            "include_start_date" => "wrong type",
20            "include_end_date" => true,
21        ]
22    );
23} catch (\Error $e) {
24    echo $e::class, ': ', $e->getMessage(), "\n";
25}
26
27var_dump($period);
28
29?>
30--EXPECTF--
31Error: Invalid serialization data for DatePeriod object
32object(DatePeriod)#%d (%d) {
33  ["start"]=>
34  object(DateTime)#%d (%d) {
35    ["date"]=>
36    string(26) "2022-07-14 00:00:00.000000"
37    ["timezone_type"]=>
38    int(3)
39    ["timezone"]=>
40    string(3) "UTC"
41  }
42  ["current"]=>
43  NULL
44  ["end"]=>
45  object(DateTime)#%d (%d) {
46    ["date"]=>
47    string(26) "2022-07-16 00:00:00.000000"
48    ["timezone_type"]=>
49    int(3)
50    ["timezone"]=>
51    string(3) "UTC"
52  }
53  ["interval"]=>
54  object(DateInterval)#%d (%d) {
55    ["y"]=>
56    int(0)
57    ["m"]=>
58    int(0)
59    ["d"]=>
60    int(1)
61    ["h"]=>
62    int(0)
63    ["i"]=>
64    int(0)
65    ["s"]=>
66    int(0)
67    ["f"]=>
68    float(0)
69    ["invert"]=>
70    int(0)
71    ["days"]=>
72    bool(false)
73    ["from_string"]=>
74    bool(false)
75  }
76  ["recurrences"]=>
77  int(1)
78  ["include_start_date"]=>
79  bool(true)
80  ["include_end_date"]=>
81  bool(false)
82}
83