Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
93.75% covered (success)
93.75%
30 / 32
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ZMonoLingualString
93.75% covered (success)
93.75%
30 / 32
83.33% covered (warning)
83.33%
5 / 6
13.04
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getDefinition
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
1 / 1
1
 isValid
81.82% covered (warning)
81.82%
9 / 11
0.00% covered (danger)
0.00%
0 / 1
8.38
 getZValue
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getLanguage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getString
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3 * WikiLambda ZMonoLingualString
4 *
5 * @file
6 * @ingroup Extensions
7 * @copyright 2020– Abstract Wikipedia team; see AUTHORS.txt
8 * @license MIT
9 */
10
11namespace MediaWiki\Extension\WikiLambda\ZObjects;
12
13use MediaWiki\Extension\WikiLambda\Registry\ZLangRegistry;
14use MediaWiki\Extension\WikiLambda\Registry\ZTypeRegistry;
15
16class ZMonoLingualString extends ZObject {
17
18    /**
19     * Create a ZMonoLingualString instance given a language ZReference and a value ZString
20     *
21     * @param ZReference|ZNaturalLanguage $language
22     * @param ZString $value
23     */
24    public function __construct( $language, $value ) {
25        $this->data[ ZTypeRegistry::Z_MONOLINGUALSTRING_LANGUAGE ] = $language;
26        $this->data[ ZTypeRegistry::Z_MONOLINGUALSTRING_VALUE ] = $value;
27    }
28
29    /**
30     * @inheritDoc
31     */
32    public static function getDefinition(): array {
33        return [
34            'type' => [
35                'type' => ZTypeRegistry::Z_REFERENCE,
36                'value' => ZTypeRegistry::Z_MONOLINGUALSTRING,
37            ],
38            'keys' => [
39                ZTypeRegistry::Z_MONOLINGUALSTRING_LANGUAGE => [
40                    'type' => ZTypeRegistry::HACK_REFERENCE_LANGUAGE,
41                    'required' => true,
42                ],
43                ZTypeRegistry::Z_MONOLINGUALSTRING_VALUE => [
44                    'type' => ZTypeRegistry::BUILTIN_STRING,
45                    'required' => true,
46                ],
47            ],
48        ];
49    }
50
51    /**
52     * @inheritDoc
53     */
54    public function isValid(): bool {
55        // Language can be a Reference or a literal Natural Language
56        $lang = $this->data[ ZTypeRegistry::Z_MONOLINGUALSTRING_LANGUAGE ];
57        if ( !( $lang instanceof ZReference ) && !( $lang instanceof ZNaturalLanguage ) ) {
58            return false;
59        }
60
61        // If ZReference, check it's a valid language Zid
62        $langs = ZLangRegistry::singleton();
63        if ( ( $lang instanceof ZReference ) && !$langs->isValidLanguageZid( $lang->getZValue() ) ) {
64            return false;
65        }
66
67        // If ZNaturalLanguage, check it's a valid Z60 object
68        if ( ( $lang instanceof ZNaturalLanguage ) && !$lang->isValid() ) {
69            return false;
70        }
71
72        // Value should be a ZString
73        if ( !( $this->data[ ZTypeRegistry::Z_MONOLINGUALSTRING_VALUE ] instanceof ZString ) ) {
74            return false;
75        }
76
77        return true;
78    }
79
80    /**
81     * Get a map representing this ZMonoLingualString language and string value.
82     *
83     * @return array Language and string of this ZMonoLingualString
84     */
85    public function getZValue() {
86        return [ $this->getLanguage() => $this->getString() ];
87    }
88
89    /**
90     * Get the Zid that represents the language for this ZMonoLingualString
91     *
92     * @return string Language Zid or code
93     */
94    public function getLanguage() {
95        return $this->data[ ZTypeRegistry::Z_MONOLINGUALSTRING_LANGUAGE ]->getZValue();
96    }
97
98    /**
99     * Get the string value of this ZMonoLingualString
100     *
101     * @return ?string String value
102     */
103    public function getString() {
104        return $this->data[ ZTypeRegistry::Z_MONOLINGUALSTRING_VALUE ]->getZValue();
105    }
106}