/**
  * @see ValueParserTestBase::validInputProvider
  */
 public function validInputProvider()
 {
     $gregorian = 'http://www.wikidata.org/entity/Q1985727';
     $julian = 'http://www.wikidata.org/entity/Q1985786';
     $julianOpts = new ParserOptions();
     $julianOpts->setOption(IsoTimestampParser::OPT_CALENDAR, $julian);
     $gregorianOpts = new ParserOptions();
     $gregorianOpts->setOption(IsoTimestampParser::OPT_CALENDAR, $gregorian);
     $prec10aOpts = new ParserOptions();
     $prec10aOpts->setOption(IsoTimestampParser::OPT_PRECISION, TimeValue::PRECISION_YEAR10);
     $precDayOpts = new ParserOptions();
     $precDayOpts->setOption(IsoTimestampParser::OPT_PRECISION, TimeValue::PRECISION_DAY);
     $precSecondOpts = new ParserOptions();
     $precSecondOpts->setOption(IsoTimestampParser::OPT_PRECISION, TimeValue::PRECISION_SECOND);
     $valid = array('+0000000000002013-07-16T00:00:00Z' => array('+2013-07-16T00:00:00Z', TimeValue::PRECISION_DAY), '+0000000000002013-07-00T00:00:00Z' => array('+2013-07-00T00:00:00Z', TimeValue::PRECISION_MONTH), '+0000000000002013-00-00T00:00:00Z' => array('+2013-00-00T00:00:00Z', TimeValue::PRECISION_YEAR), '+0000000000000000-00-00T00:00:00Z' => array('+0000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR, $julian), '+0000000000002000-00-00T00:00:00Z' => array('+2000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR), '+0000000000008000-00-00T00:00:00Z' => array('+8000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1K), '+0000000000020000-00-00T00:00:00Z' => array('+20000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR10K), '+0000000000200000-00-00T00:00:00Z' => array('+200000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR100K), '+0000000002000000-00-00T00:00:00Z' => array('+2000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1M), '+0000000020000000-00-00T00:00:00Z' => array('+20000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR10M), '+0000000200000000-00-00T00:00:00Z' => array('+200000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR100M), '+0000002000000000-00-00T00:00:00Z' => array('+2000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '+0000020000000000-00-00T00:00:00Z' => array('+20000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '+0000200000000000-00-00T00:00:00Z' => array('+200000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '+0002000000000000-00-00T00:00:00Z' => array('+2000000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '+0020000000000000-00-00T00:00:00Z' => array('+20000000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '+0200000000000000-00-00T00:00:00Z' => array('+200000000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '+2000000000000000-00-00T00:00:00Z' => array('+2000000000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G), '-2000000000000000-00-00T00:00:00Z' => array('-2000000000000000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR1G, $julian), '+0000000000002013-07-16T00:00:00Z (Gregorian)' => array('+2013-07-16T00:00:00Z', TimeValue::PRECISION_DAY), '+0000000000000000-01-01T00:00:00Z (Gregorian)' => array('+0000-01-01T00:00:00Z', TimeValue::PRECISION_DAY), '+0000000000002001-01-14T00:00:00Z (Julian)' => array('+2001-01-14T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '+0000000000010000-01-01T00:00:00Z (Gregorian)' => array('+10000-01-01T00:00:00Z', TimeValue::PRECISION_DAY), '-0000000000000001-01-01T00:00:00Z (Gregorian)' => array('-0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $gregorian), '-00000000001-01-01T00:00:00Z (Gregorian)' => array('-0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $gregorian, $julianOpts), '-00000000001-01-01T00:00:00Z (Julian)' => array('-0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian, $gregorianOpts), '-000001-01-01T00:00:00Z (Gregorian)' => array('-0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $gregorian), '-1-01-01T00:00:00Z (Gregorian)' => array('-0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $gregorian), '-1-01-02T00:00:00Z' => array('-0001-01-02T00:00:00Z', TimeValue::PRECISION_DAY, $gregorian, $gregorianOpts), '+2001-01-03T00:00:00Z' => array('+2001-01-03T00:00:00Z', TimeValue::PRECISION_DAY, $julian, $julianOpts), '-1-01-04T00:00:00Z' => array('-0001-01-04T00:00:00Z', TimeValue::PRECISION_YEAR10, $julian, $prec10aOpts), '-1-01-05T00:00:00Z' => array('-0001-01-05T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '+1999-00-00T00:00:00Z' => array('+1999-00-00T00:00:00Z', TimeValue::PRECISION_YEAR), '+2000-00-00T00:00:00Z' => array('+2000-00-00T00:00:00Z', TimeValue::PRECISION_YEAR), '+2010-00-00T00:00:00Z' => array('+2010-00-00T00:00:00Z', TimeValue::PRECISION_YEAR), '2015-01-01T00:00:00Z' => array('+2015-01-01T00:00:00Z', TimeValue::PRECISION_DAY), '2015-01-01T00:00:00' => array('+2015-01-01T00:00:00Z', TimeValue::PRECISION_DAY), "−2015-01-01T00:00:00" => array('-2015-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '2015-01-01T161718' => array('+0000000000002015-01-01T16:17:18Z', TimeValue::PRECISION_SECOND), '2015-01-01T1617' => array('+0000000000002015-01-01T16:17:00Z', TimeValue::PRECISION_MINUTE), '2015-01-01T00:00' => array('+2015-01-01T00:00:00Z', TimeValue::PRECISION_DAY), '2015-01-01' => array('+2015-01-01T00:00:00Z', TimeValue::PRECISION_DAY), '60-01-01' => array('+0060-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '32-01-01' => array('+0032-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '1-01-01T00:00' => array('+0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '001-01-01' => array('+0001-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '-01-02-03' => array('-0001-02-03T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '+01-02-03' => array('+0001-02-03T00:00:00Z', TimeValue::PRECISION_DAY, $julian), '2015-01-00' => array('+2015-01-00T00:00:00Z', TimeValue::PRECISION_MONTH), '2015-00-00' => array('+2015-00-00T00:00:00Z', TimeValue::PRECISION_YEAR), '+2015-01-01T00:00:61Z' => array('+2015-01-01T00:00:61Z', TimeValue::PRECISION_SECOND), '+0000000000000012-12-00T00:00:00Z' => array('+0012-12-00T00:00:00Z', TimeValue::PRECISION_MONTH, $julian, $precDayOpts), '+2015-01-01T00:00:00Z' => array('+2015-01-01T00:00:00Z', TimeValue::PRECISION_SECOND, $gregorian, $precSecondOpts), '1583-01-01' => array('+1583-01-01T00:00:00Z', TimeValue::PRECISION_DAY, $gregorian), '1582-08-01' => array('+1582-08-01T00:00:00Z', TimeValue::PRECISION_DAY, $julian));
     $argLists = array();
     foreach ($valid as $key => $value) {
         $timestamp = $value[0];
         $precision = isset($value[1]) ? $value[1] : TimeValue::PRECISION_DAY;
         $calendarModel = isset($value[2]) ? $value[2] : $gregorian;
         $options = isset($value[3]) ? $value[3] : null;
         $argLists[] = array((string) $key, new TimeValue($timestamp, 0, 0, 0, $precision, $calendarModel), new IsoTimestampParser(new CalendarModelParser($options), $options));
     }
     return $argLists;
 }
 public function testDigitGroupSeparatorOption()
 {
     $options = new ParserOptions();
     $options->setOption(YearTimeParser::OPT_DIGIT_GROUP_SEPARATOR, '.');
     $parser = new YearTimeParser(null, $options);
     $timeValue = $parser->parse('-19.000');
     $this->assertSame('-19000-00-00T00:00:00Z', $timeValue->getTime());
 }
 /**
  * @return MonthNameUnlocalizer
  */
 public function getMonthNameUnlocalizer()
 {
     $languageCode = $this->options->getOption(ValueParser::OPT_LANG);
     if ($languageCode === self::CANONICAL_LANGUAGE_CODE) {
         $replacements = array();
     } else {
         $replacements = $this->monthNameProvider->getMonthNameReplacements($languageCode, self::CANONICAL_LANGUAGE_CODE);
     }
     return new MonthNameUnlocalizer($replacements);
 }
 public function testSetAndGetOptions()
 {
     /**
      * @var StringValueParser $parser
      */
     $parser = $this->getInstance();
     $parser->setOptions(new ParserOptions());
     $this->assertEquals(new ParserOptions(), $parser->getOptions());
     $options = new ParserOptions();
     $options->setOption('~=[,,_,,]:3', '~=[,,_,,]:3');
     $parser->setOptions($options);
     $this->assertEquals($options, $parser->getOptions());
 }
 private function newTimeParserFactory($languageCode = 'en')
 {
     $options = new ParserOptions();
     $options->setOption(ValueParser::OPT_LANG, $languageCode);
     $monthNameProvider = $this->getMock('Wikibase\\Repo\\Parsers\\MonthNameProvider');
     $monthNameProvider->expects($this->any())->method('getMonthNameReplacements')->will($this->returnCallback(function ($languageCode, $baseLanguageCode) {
         $replacements = array();
         for ($i = 1; $i <= 12; $i++) {
             $canonical = $baseLanguageCode . 'Month' . $i;
             $replacements[$languageCode . 'Month' . $i] = $canonical;
             $replacements[$languageCode . 'Month' . $i . 'Gen'] = $canonical;
         }
         return $replacements;
     }));
     return new TimeParserFactory($options, $monthNameProvider);
 }
 /**
  * @return string
  */
 private function getDigitGroupSeparator()
 {
     $languageCode = $this->options->getOption(ValueParser::OPT_LANG);
     $language = Language::factory($languageCode);
     $separatorMap = $language->separatorTransformTable();
     $canonical = YearTimeParser::CANONICAL_DIGIT_GROUP_SEPARATOR;
     return isset($separatorMap[$canonical]) ? $separatorMap[$canonical] : $canonical;
 }
 /**
  * @dataProvider conflictingUnitOptionProvider
  */
 public function testConflictingUnitOption($value, $unit)
 {
     $options = new ParserOptions();
     $options->setOption(QuantityParser::OPT_UNIT, $unit);
     $parser = $this->getQuantityParser($options);
     $this->setExpectedException('ValueParsers\\ParseException');
     $parser->parse($value);
 }
 /**
  * @see ValueParserTestBase::getInstance
  *
  * @return CalendarModelParser
  */
 protected function getInstance()
 {
     $options = new ParserOptions();
     $options->setOption(CalendarModelParser::OPT_CALENDAR_MODEL_URIS, array('Localized' => 'Unlocalized'));
     return new CalendarModelParser($options);
 }
 /**
  * @param string|null $optionsParam
  *
  * @return ParserOptions
  */
 private function getOptionsObject($optionsParam)
 {
     $parserOptions = new ParserOptions();
     $parserOptions->setOption(ValueParser::OPT_LANG, $this->getLanguage()->getCode());
     if (is_string($optionsParam) && $optionsParam !== '') {
         $options = json_decode($optionsParam, true);
         if (!is_array($options)) {
             $this->errorReporter->dieError('Malformed options parameter', 'malformed-options');
         }
         foreach ($options as $name => $value) {
             $parserOptions->setOption($name, $value);
         }
     }
     return $parserOptions;
 }
 public function testDefaultOption()
 {
     $options = array('foo' => 42, 'bar' => 4.2, 'baz' => array('o_O', false, null, '42' => 42, array()));
     $parserOptions = new ParserOptions($options);
     foreach ($options as $option => $value) {
         $parserOptions->defaultOption($option, 9001);
         $this->assertEquals(serialize($value), serialize($parserOptions->getOption($option)), 'Defaulting a set option should not affect its value');
     }
     $defaults = array('N' => 42, 'y' => 4.2, 'a' => false, 'n' => array('42' => 42, array('')));
     foreach ($defaults as $option => $value) {
         $parserOptions->defaultOption($option, $value);
         $this->assertEquals(serialize($value), serialize($parserOptions->getOption($option)), 'Defaulting a not set option should affect its value');
     }
 }
 /**
  * Shortcut to $this->options->defaultOption.
  *
  * @since 0.1
  *
  * @param string $option
  * @param mixed $default
  */
 protected final function defaultOption($option, $default)
 {
     $this->options->defaultOption($option, $default);
 }