xref: /plugin/authssocas/vendor/psr/log/Psr/Log/Test/TestLogger.php (revision d10b5556242e78d8a430c323b91984ec16415a46)
1*d10b5556SXylle<?php
2*d10b5556SXylle
3*d10b5556SXyllenamespace Psr\Log\Test;
4*d10b5556SXylle
5*d10b5556SXylleuse Psr\Log\AbstractLogger;
6*d10b5556SXylle
7*d10b5556SXylle/**
8*d10b5556SXylle * Used for testing purposes.
9*d10b5556SXylle *
10*d10b5556SXylle * It records all records and gives you access to them for verification.
11*d10b5556SXylle *
12*d10b5556SXylle * @method bool hasEmergency($record)
13*d10b5556SXylle * @method bool hasAlert($record)
14*d10b5556SXylle * @method bool hasCritical($record)
15*d10b5556SXylle * @method bool hasError($record)
16*d10b5556SXylle * @method bool hasWarning($record)
17*d10b5556SXylle * @method bool hasNotice($record)
18*d10b5556SXylle * @method bool hasInfo($record)
19*d10b5556SXylle * @method bool hasDebug($record)
20*d10b5556SXylle *
21*d10b5556SXylle * @method bool hasEmergencyRecords()
22*d10b5556SXylle * @method bool hasAlertRecords()
23*d10b5556SXylle * @method bool hasCriticalRecords()
24*d10b5556SXylle * @method bool hasErrorRecords()
25*d10b5556SXylle * @method bool hasWarningRecords()
26*d10b5556SXylle * @method bool hasNoticeRecords()
27*d10b5556SXylle * @method bool hasInfoRecords()
28*d10b5556SXylle * @method bool hasDebugRecords()
29*d10b5556SXylle *
30*d10b5556SXylle * @method bool hasEmergencyThatContains($message)
31*d10b5556SXylle * @method bool hasAlertThatContains($message)
32*d10b5556SXylle * @method bool hasCriticalThatContains($message)
33*d10b5556SXylle * @method bool hasErrorThatContains($message)
34*d10b5556SXylle * @method bool hasWarningThatContains($message)
35*d10b5556SXylle * @method bool hasNoticeThatContains($message)
36*d10b5556SXylle * @method bool hasInfoThatContains($message)
37*d10b5556SXylle * @method bool hasDebugThatContains($message)
38*d10b5556SXylle *
39*d10b5556SXylle * @method bool hasEmergencyThatMatches($message)
40*d10b5556SXylle * @method bool hasAlertThatMatches($message)
41*d10b5556SXylle * @method bool hasCriticalThatMatches($message)
42*d10b5556SXylle * @method bool hasErrorThatMatches($message)
43*d10b5556SXylle * @method bool hasWarningThatMatches($message)
44*d10b5556SXylle * @method bool hasNoticeThatMatches($message)
45*d10b5556SXylle * @method bool hasInfoThatMatches($message)
46*d10b5556SXylle * @method bool hasDebugThatMatches($message)
47*d10b5556SXylle *
48*d10b5556SXylle * @method bool hasEmergencyThatPasses($message)
49*d10b5556SXylle * @method bool hasAlertThatPasses($message)
50*d10b5556SXylle * @method bool hasCriticalThatPasses($message)
51*d10b5556SXylle * @method bool hasErrorThatPasses($message)
52*d10b5556SXylle * @method bool hasWarningThatPasses($message)
53*d10b5556SXylle * @method bool hasNoticeThatPasses($message)
54*d10b5556SXylle * @method bool hasInfoThatPasses($message)
55*d10b5556SXylle * @method bool hasDebugThatPasses($message)
56*d10b5556SXylle */
57*d10b5556SXylleclass TestLogger extends AbstractLogger
58*d10b5556SXylle{
59*d10b5556SXylle    /**
60*d10b5556SXylle     * @var array
61*d10b5556SXylle     */
62*d10b5556SXylle    public $records = [];
63*d10b5556SXylle
64*d10b5556SXylle    public $recordsByLevel = [];
65*d10b5556SXylle
66*d10b5556SXylle    /**
67*d10b5556SXylle     * @inheritdoc
68*d10b5556SXylle     */
69*d10b5556SXylle    public function log($level, $message, array $context = [])
70*d10b5556SXylle    {
71*d10b5556SXylle        $record = [
72*d10b5556SXylle            'level' => $level,
73*d10b5556SXylle            'message' => $message,
74*d10b5556SXylle            'context' => $context,
75*d10b5556SXylle        ];
76*d10b5556SXylle
77*d10b5556SXylle        $this->recordsByLevel[$record['level']][] = $record;
78*d10b5556SXylle        $this->records[] = $record;
79*d10b5556SXylle    }
80*d10b5556SXylle
81*d10b5556SXylle    public function hasRecords($level)
82*d10b5556SXylle    {
83*d10b5556SXylle        return isset($this->recordsByLevel[$level]);
84*d10b5556SXylle    }
85*d10b5556SXylle
86*d10b5556SXylle    public function hasRecord($record, $level)
87*d10b5556SXylle    {
88*d10b5556SXylle        if (is_string($record)) {
89*d10b5556SXylle            $record = ['message' => $record];
90*d10b5556SXylle        }
91*d10b5556SXylle        return $this->hasRecordThatPasses(function ($rec) use ($record) {
92*d10b5556SXylle            if ($rec['message'] !== $record['message']) {
93*d10b5556SXylle                return false;
94*d10b5556SXylle            }
95*d10b5556SXylle            if (isset($record['context']) && $rec['context'] !== $record['context']) {
96*d10b5556SXylle                return false;
97*d10b5556SXylle            }
98*d10b5556SXylle            return true;
99*d10b5556SXylle        }, $level);
100*d10b5556SXylle    }
101*d10b5556SXylle
102*d10b5556SXylle    public function hasRecordThatContains($message, $level)
103*d10b5556SXylle    {
104*d10b5556SXylle        return $this->hasRecordThatPasses(function ($rec) use ($message) {
105*d10b5556SXylle            return strpos($rec['message'], $message) !== false;
106*d10b5556SXylle        }, $level);
107*d10b5556SXylle    }
108*d10b5556SXylle
109*d10b5556SXylle    public function hasRecordThatMatches($regex, $level)
110*d10b5556SXylle    {
111*d10b5556SXylle        return $this->hasRecordThatPasses(function ($rec) use ($regex) {
112*d10b5556SXylle            return preg_match($regex, $rec['message']) > 0;
113*d10b5556SXylle        }, $level);
114*d10b5556SXylle    }
115*d10b5556SXylle
116*d10b5556SXylle    public function hasRecordThatPasses(callable $predicate, $level)
117*d10b5556SXylle    {
118*d10b5556SXylle        if (!isset($this->recordsByLevel[$level])) {
119*d10b5556SXylle            return false;
120*d10b5556SXylle        }
121*d10b5556SXylle        foreach ($this->recordsByLevel[$level] as $i => $rec) {
122*d10b5556SXylle            if (call_user_func($predicate, $rec, $i)) {
123*d10b5556SXylle                return true;
124*d10b5556SXylle            }
125*d10b5556SXylle        }
126*d10b5556SXylle        return false;
127*d10b5556SXylle    }
128*d10b5556SXylle
129*d10b5556SXylle    public function __call($method, $args)
130*d10b5556SXylle    {
131*d10b5556SXylle        if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
132*d10b5556SXylle            $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
133*d10b5556SXylle            $level = strtolower($matches[2]);
134*d10b5556SXylle            if (method_exists($this, $genericMethod)) {
135*d10b5556SXylle                $args[] = $level;
136*d10b5556SXylle                return call_user_func_array([$this, $genericMethod], $args);
137*d10b5556SXylle            }
138*d10b5556SXylle        }
139*d10b5556SXylle        throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
140*d10b5556SXylle    }
141*d10b5556SXylle
142*d10b5556SXylle    public function reset()
143*d10b5556SXylle    {
144*d10b5556SXylle        $this->records = [];
145*d10b5556SXylle        $this->recordsByLevel = [];
146*d10b5556SXylle    }
147*d10b5556SXylle}
148