1: <?php
2:
3: /**
4: * This file is part of expect package.
5: *
6: * (c) Noritaka Horio <holy.shared.design@gmail.com>
7: *
8: * This source file is subject to the MIT license that is bundled
9: * with this source code in the file LICENSE.
10: */
11: namespace expect\config;
12:
13: use expect\Configuration;
14:
15: /**
16: * Implement of Configuration
17: *
18: * @author Noritaka Horio <holy.shared.design@gmail.com>
19: * @copyright Noritaka Horio <holy.shared.design@gmail.com>
20: */
21: trait ConfigurableConfiguration
22: {
23: /**
24: * @var \expect\ResultReporter|null
25: */
26: private $resultReporter = null;
27:
28: /**
29: * @var \expect\PackageRegistrar[]
30: */
31: private $matcherRegistrars = [];
32:
33: /**
34: * {@inheritdoc}
35: */
36: public function getResultReporter()
37: {
38: return $this->resultReporter;
39: }
40:
41: /**
42: * {@inheritdoc}
43: */
44: public function getMatcherRegistrars()
45: {
46: return $this->matcherRegistrars;
47: }
48:
49: /**
50: * {@inheritdoc}
51: */
52: public function merge(Configuration $config)
53: {
54: $matcherRegistrars = array_merge(
55: $this->matcherRegistrars,
56: $config->getMatcherRegistrars()
57: );
58:
59: $reporter = $config->getResultReporter();
60:
61: if ($reporter === null) {
62: $reporter = $this->resultReporter;
63: }
64:
65: return new RuntimeConfiguration($matcherRegistrars, $reporter);
66: }
67: }
68: