/** * @dataProvider data_resolverStyle */ public function test_resolverStyle($str, ResolverStyle $style, $expectedEx, $year, $month, $day) { $builder = new DateTimeFormatterBuilder(); $builder->appendValue(ChronoField::YEAR_OF_ERA()); $builder->appendLiteral("/"); $builder->appendValue(ChronoField::MONTH_OF_YEAR()); $builder->appendLiteral("/"); $builder->appendValue(ChronoField::DAY_OF_MONTH()); $eraMap = [1 => "CE", 0 => "BCE"]; $optionalFormatter = (new DateTimeFormatterBuilder())->appendLiteral(" ")->appendText3(ChronoField::ERA(), $eraMap)->toFormatter(); $formatter = $builder->appendOptional($optionalFormatter)->toFormatter(); $formatter = $formatter->withResolverStyle($style); if ($expectedEx == null) { $accessor = $formatter->parse($str); $this->assertEquals($accessor->get(ChronoField::YEAR_OF_ERA()), $year); $this->assertEquals($accessor->get(ChronoField::MONTH_OF_YEAR()), $month); $this->assertEquals($accessor->get(ChronoField::DAY_OF_MONTH()), $day); } else { try { $formatter->parse($str); $this->fail(); } catch (\Exception $ex) { $this->assertInstanceOf($expectedEx, $ex); } } }
/** * @dataProvider data_combine */ public function test_derive($field1, $value1, $field2, $value2, $field3, $value3, $field4, $value4, $query, $expectedVal) { $str = ""; $dtfb = new DateTimeFormatterBuilder(); $dtfb->appendValue($field1)->appendLiteral('-'); $str .= $value1 . "-"; if ($field2 != null) { $dtfb->appendValue($field2)->appendLiteral('-'); $str .= $value2 . "-"; } if ($field3 != null) { $dtfb->appendValue($field3)->appendLiteral('-'); $str .= $value3 . "-"; } if ($field4 != null) { $dtfb->appendValue($field4)->appendLiteral('-'); $str .= $value4 . "-"; } $parsed = $dtfb->toFormatter()->parse($str); if ($query == LocalDate::class) { if ($expectedVal != null) { $this->assertEquals($parsed->query(LocalDate::fromQuery()), $expectedVal); } else { try { $parsed->query(LocalDate::fromQuery()); $this->fail(); } catch (DateTimeException $ex) { // expected } } } else { throw new IllegalArgumentException(); } }
public function test_adjacent_strict_firstVariableWidth_fails() { // fails because literal is a number and variable width parse greedily absorbs it $f = $this->builder->appendValue(ChronoField::HOUR_OF_DAY())->appendValue2(ChronoField::MINUTE_OF_HOUR(), 2)->appendLiteral('9')->toFormatter2(Locale::UK()); $pp = new ParsePosition(0); $parsed = $f->parseUnresolved("12309", $pp); $this->assertEquals($pp->getErrorIndex(), 5); $this->assertEquals($parsed, null); }
public function test_optionalStartEnd_immediateStartEnd() { $this->builder->appendValue(CF::MONTH_OF_YEAR())->optionalStart()->optionalEnd()->appendValue(CF::DAY_OF_MONTH()); $f = $this->builder->toFormatter(); $this->assertEquals($f->__toString(), "Value(MonthOfYear)Value(DayOfMonth)"); }