Completed
Push — BoundedQuantityValue ( 1533af )
by Daniel
02:40
created

tests/ValueParsers/QuantityParserTest.php (49 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace ValueParsers\Test;
4
5
use DataValues\QuantityValue;
6
use ValueParsers\ParserOptions;
7
use ValueParsers\QuantityParser;
8
use ValueParsers\ValueParser;
9
10
/**
11
 * @covers ValueParsers\QuantityParser
12
 *
13
 * @group DataValue
14
 * @group DataValueExtensions
15
 *
16
 * @license GPL-2.0+
17
 * @author Daniel Kinzler
18
 */
19
class QuantityParserTest extends StringValueParserTest {
20
21
	/**
22
	 * @deprecated since DataValues Common 0.3, just use getInstance.
23
	 */
24
	protected function getParserClass() {
25
		throw new \LogicException( 'Should not be called, use getInstance' );
26
	}
27
28
	/**
29
	 * @see ValueParserTestBase::getInstance
30
	 *
31
	 * @return QuantityParser
32
	 */
33
	protected function getInstance() {
34
		return $this->getQuantityParser();
35
	}
36
37
	/**
38
	 * @param ParserOptions|null $options
39
	 *
40
	 * @return QuantityParser
41
	 */
42
	private function getQuantityParser( ParserOptions $options = null ) {
43
		$unlocalizer = $this->getMock( 'ValueParsers\NumberUnlocalizer' );
44
45
		$unlocalizer->expects( $this->any() )
46
			->method( 'unlocalizeNumber' )
47
			->will( $this->returnArgument( 0 ) );
48
49
		// The most minimal regex that accepts all the test cases below.
50
		$unlocalizer->expects( $this->any() )
51
			->method( 'getNumberRegex' )
52
			->will( $this->returnValue( '[-+]? *(?:\d+\.\d*|\.?\d+)(?:e-?\d+)?' ) );
53
54
		// This minimal regex supports % and letters, optionally followed by a digit.
55
		$unlocalizer->expects( $this->any() )
56
			->method( 'getUnitRegex' )
57
			->will( $this->returnValue( '[\p{L}%]+[\d³]?' ) );
58
59
		return new QuantityParser( $options, $unlocalizer );
60
	}
61
62
	/**
63
	 * @see ValueParserTestBase::validInputProvider
64
	 */
65
	public function validInputProvider() {
66
		$amounts = array(
67
			// amounts in various styles and forms
68
			'0' => QuantityValue::newFromNumber( 0, '1', 1, -1 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 1.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
69
			'-0' => QuantityValue::newFromNumber( 0, '1', 1, -1 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 1.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
70
			'-00.00' => QuantityValue::newFromNumber( '+0.00', '1', '+0.01', '-0.01' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.01'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
71
			'+00.00' => QuantityValue::newFromNumber( '+0.00', '1', '+0.01', '-0.01' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.01'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
72
			'0001' => QuantityValue::newFromNumber( 1, '1', 2, 0 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 2.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
73
			'+01' => QuantityValue::newFromNumber( 1, '1', 2, 0 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 2.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
74
			'-1' => QuantityValue::newFromNumber( -1, '1', 0, -2 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 0.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
75
			'+42' => QuantityValue::newFromNumber( 42, '1', 43, 41 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 43.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
76
			' -  42' => QuantityValue::newFromNumber( -42, '1', -41, -43 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with -41.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
77
			'9001' => QuantityValue::newFromNumber( 9001, '1', 9002, 9000 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 9002.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
78
			'.5' => QuantityValue::newFromNumber( '+0.5', '1', '+0.6', '+0.4' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.6'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
79
			'-.125' => QuantityValue::newFromNumber( '-0.125', '1', '-0.124', '-0.126' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '-0.124'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
80
			'3.' => QuantityValue::newFromNumber( 3, '1', 4, 2 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 4.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
81
			' 3 ' => QuantityValue::newFromNumber( 3, '1', 4, 2 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 4.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
82
			'2.125' => QuantityValue::newFromNumber( '+2.125', '1', '+2.126', '+2.124' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+2.126'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
83
			'2.1250' => QuantityValue::newFromNumber( '+2.1250', '1', '+2.1251', '+2.1249' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+2.1251'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
84
85
			'1.4e-2' => QuantityValue::newFromNumber( '+0.014', '1', '+0.015', '+0.013' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.015'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
86
			'1.4e3' => QuantityValue::newFromNumber( '+1400', '1', '+1500', '+1300' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+1500'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
87
			'1.4e3!m' => QuantityValue::newFromNumber( '+1400', 'm', '+1400', '+1400' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+1400'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
88
			'1.4e3m2' => QuantityValue::newFromNumber( '+1400', 'm2', '+1500', '+1300' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+1500'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
89
			'1.4ev' => QuantityValue::newFromNumber( '+1.4', 'ev', '+1.5', '+1.3' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+1.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
90
			'1.4e' => QuantityValue::newFromNumber( '+1.4', 'e', '+1.5', '+1.3' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+1.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
91
			'12e3e4' => QuantityValue::newFromNumber( '+12000', 'e4', '+13000', '+11000' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+13000'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
92
			// FIXME: Add support for 12x10^3, see DecimalParser.
93
			'0.004e3' => QuantityValue::newFromNumber( '+4', '1', '+5', '+3' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
94
			'0.004e-3' => QuantityValue::newFromNumber( '+0.000004', '1', '+0.000005', '+0.000003' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.000005'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
95
			'4000e3' => QuantityValue::newFromNumber( '+4000000', '1', '+4001000', '+3999000' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+4001000'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
96
			'4000e-3' => QuantityValue::newFromNumber( '+4.000', '1', '+4.001', '+3.999' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+4.001'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
97
98
			// precision
99
			'0!' => QuantityValue::newFromNumber( 0, '1', 0, 0 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 0.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
100
			'10.003!' => QuantityValue::newFromNumber( '+10.003', '1', '+10.003', '+10.003' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+10.003'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
101
			'-200!' => QuantityValue::newFromNumber( -200, '1', -200, -200 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with -200.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
102
			'0~' => QuantityValue::newFromNumber( 0, '1', 1, -1 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 1.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
103
			'10.003~' => QuantityValue::newFromNumber( '+10.003', '1', '+10.004', '+10.002' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+10.004'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
104
			'-200~' => QuantityValue::newFromNumber( -200, '1', -199, -201 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with -199.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
105
106
			// uncertainty
107
			'5.3 +/- 0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
108
			'5.3+-0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
109
			'5.3 ±0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
110
111
			'5.3 +/- +0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
112
			'5.3+-+0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
113
114
			'5.3e3 +/- 0.2e2' => QuantityValue::newFromNumber( '+5300', '1', '+5320', '+5280' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5320'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
115
			'2e-2+/-1.1e-1' => QuantityValue::newFromNumber( '+0.02', '1', '+0.13', '-0.09' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.13'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
116
117
			// negative
118
			'5.3 +/- -0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
119
			'5.3+--0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
120
			'5.3 ±-0.2' => QuantityValue::newFromNumber( '+5.3', '1', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
121
122
			// units
123
			'5.3+-0.2cm' => QuantityValue::newFromNumber( '+5.3', 'cm', '+5.5', '+5.1' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+5.5'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
124
			'10.003! km' => QuantityValue::newFromNumber( '+10.003', 'km', '+10.003', '+10.003' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+10.003'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
125
			'-200~ %  ' => QuantityValue::newFromNumber( -200, '%', -199, -201 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with -199.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
126
			'100003 m³' => QuantityValue::newFromNumber( 100003, 'm³', 100004, 100002 ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with 100004.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
127
			'3.±-0.2µ' => QuantityValue::newFromNumber( '+3', 'µ', '+3.2', '+2.8' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+3.2'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
128
			'+00.20 Å' => QuantityValue::newFromNumber( '+0.20', 'Å', '+0.21', '+0.19' ),
0 ignored issues
show
The call to QuantityValue::newFromNumber() has too many arguments starting with '+0.21'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
129
		);
130
131
		$argLists = array();
132
133
		foreach ( $amounts as $amount => $expected ) {
134
			//NOTE: PHP may "helpfully" have converted $amount to an integer. Yay.
135
			$argLists[] = array( strval( $amount ), $expected );
136
		}
137
138
		return $argLists;
139
	}
140
141
	/**
142
	 * @see StringValueParserTest::invalidInputProvider
143
	 */
144
	public function invalidInputProvider() {
145
		$argLists = parent::invalidInputProvider();
146
147
		$invalid = array(
148
			'foo',
149
			'',
150
			'.',
151
			'+.',
152
			'-.',
153
			'--1',
154
			'++1',
155
			'1-',
156
			'one',
157
			//'0x20', // this is actually valid, "x20" is read as the unit.
158
			'1+1',
159
			'1-1',
160
			'1.2.3',
161
162
			',3,',
163
			'10,000',
164
			'10\'000',
165
166
			'2!!',
167
			'!2',
168
			'2!2',
169
170
			'2!~',
171
			'2~!',
172
			'2~~',
173
			'~2',
174
			'2~2',
175
176
			'2 -- 2',
177
			'2++2',
178
			'2+±2',
179
			'2-±2',
180
181
			'2()',
182
			'2*',
183
			'2x y',
184
			'x 2 y',
185
186
			'100 003',
187
			'1 . 0',
188
		);
189
190
		foreach ( $invalid as $value ) {
191
			$argLists[] = array( $value );
192
		}
193
194
		return $argLists;
195
	}
196
197
	public function testParseLocalizedQuantity() {
198
		$options = new ParserOptions();
199
		$options->setOption( ValueParser::OPT_LANG, 'test' );
200
201
		$unlocalizer = $this->getMock( 'ValueParsers\NumberUnlocalizer' );
202
203
		$charmap = array(
204
			' ' => '',
205
			',' => '.',
206
		);
207
208
		$unlocalizer->expects( $this->any() )
209
			->method( 'unlocalizeNumber' )
210
			->will( $this->returnCallback(
211
				function( $number ) use ( $charmap ) {
212
					return str_replace( array_keys( $charmap ), array_values( $charmap ), $number );
213
				}
214
			) );
215
216
		$unlocalizer->expects( $this->any() )
217
			->method( 'getNumberRegex' )
218
			->will(  $this->returnValue( '[\d ]+(?:,\d+)?' ) );
219
220
		$unlocalizer->expects( $this->any() )
221
			->method( 'getUnitRegex' )
222
			->will( $this->returnValue( '[a-z~]+' ) );
223
224
		$parser = new QuantityParser( $options, $unlocalizer );
225
226
		$quantity = $parser->parse( '1 22 333,77+-3a~b' );
227
228
		$this->assertEquals( '122333.77', $quantity->getAmount() );
229
		$this->assertEquals( 'a~b', $quantity->getUnit() );
230
	}
231
232
	/**
233
	 * @dataProvider unitOptionProvider
234
	 */
235
	public function testUnitOption( $value, $unit, $expected ) {
236
		$options = new ParserOptions();
237
		$options->setOption( QuantityParser::OPT_UNIT, $unit );
238
239
		$parser = $this->getQuantityParser( $options );
240
241
		$quantity = $parser->parse( $value );
242
		$this->assertEquals( $expected, $quantity->getUnit() );
243
	}
244
245
	public function unitOptionProvider() {
246
		return array(
247
			array( '17 kittens', null, 'kittens' ),
248
			array( '17', 'kittens', 'kittens' ),
249
			array( '17 kittens', 'kittens', 'kittens' ),
250
			array( '17m', 'm', 'm' ),
251
			array( ' 17 ', ' http://concept.uri ', 'http://concept.uri' ),
252
		);
253
	}
254
255
	/**
256
	 * @dataProvider conflictingUnitOptionProvider
257
	 */
258
	public function testConflictingUnitOption( $value, $unit ) {
259
		$options = new ParserOptions();
260
		$options->setOption( QuantityParser::OPT_UNIT, $unit );
261
262
		$parser = $this->getQuantityParser( $options );
263
264
		$this->setExpectedException( 'ValueParsers\ParseException' );
265
		$parser->parse( $value );
266
	}
267
268
	public function conflictingUnitOptionProvider() {
269
		return array(
270
			array( '17 kittens', 'm' ),
271
			array( '17m', 'kittens' ),
272
			array( '17m', '' ),
273
		);
274
	}
275
276
}
277