assertEquals($f->dataValue(), null); } public function testConstructorWithString() { $f = new TimeField('Time', 'Time', '23:00:00'); $this->assertEquals($f->dataValue(), '23:00:00'); } public function testValidate() { $f = new TimeField('Time', 'Time', '11pm'); $this->assertTrue($f->validate(new RequiredFields())); $f = new TimeField('Time', 'Time', '23:59'); $this->assertTrue($f->validate(new RequiredFields())); $f = new TimeField('Time', 'Time', 'wrong'); $this->assertFalse($f->validate(new RequiredFields())); } public function testValidateLenientWithHtml5() { $f = new TimeField('Time', 'Time', '23:59:59'); $f->setHTML5(true); $this->assertTrue($f->validate(new RequiredFields())); $f = new TimeField('Time', 'Time', '23:59'); // leave out seconds $f->setHTML5(true); $this->assertTrue($f->validate(new RequiredFields())); } public function testSetLocale() { // should get en_NZ by default through setUp() $f = new TimeField('Time', 'Time'); $f->setHTML5(false); $f->setLocale('fr_FR'); // TODO Find a hour format thats actually different $f->setValue('23:59'); $this->assertEquals($f->dataValue(), '23:59:00'); } public function testSetValueWithUseStrToTime() { $f = new TimeField('Time', 'Time'); $f->setValue('11pm'); $this->assertEquals( $f->dataValue(), '23:00:00', 'Setting value to "11pm" parses with strtotime enabled' ); $this->assertTrue($f->validate(new RequiredFields())); $f = new TimeField('Time', 'Time'); $f->setValue('11:59pm'); $this->assertEquals('23:59:00', $f->dataValue()); $f = new TimeField('Time', 'Time'); $f->setValue('11:59 pm'); $this->assertEquals('23:59:00', $f->dataValue()); $f = new TimeField('Time', 'Time'); $f->setValue('23:59'); $this->assertEquals('23:59:00', $f->dataValue()); $f = new TimeField('Time', 'Time'); $f->setValue('23:59:38'); $this->assertEquals('23:59:38', $f->dataValue()); $f = new TimeField('Time', 'Time'); $f->setValue('12:00 am'); $this->assertEquals($f->dataValue(), '00:00:00'); } public function testOverrideWithNull() { $field = new TimeField('Time', 'Time'); $field->setValue('11:00:00'); $field->setValue(''); $this->assertEquals($field->dataValue(), ''); } /** * Test that AM/PM is preserved correctly in various situations */ public function testSetTimeFormat() { // Test with timeformat that includes hour // Check pm $f = new TimeField('Time', 'Time'); $f->setHTML5(false); $f->setTimeFormat('h:mm:ss a'); $f->setValue('3:59 pm'); $this->assertEquals($f->dataValue(), '15:59:00'); // Check am $f = new TimeField('Time', 'Time'); $f->setHTML5(false); $f->setTimeFormat('h:mm:ss a'); $f->setValue('3:59 am'); $this->assertEquals($f->dataValue(), '03:59:00'); // Check with ISO date/time $f = new TimeField('Time', 'Time'); $f->setHTML5(false); $f->setTimeFormat('h:mm:ss a'); $f->setValue('15:59:00'); $this->assertEquals($f->dataValue(), '15:59:00'); // ISO am $f = new TimeField('Time', 'Time'); $f->setHTML5(false); $f->setTimeFormat('h:mm:ss a'); $f->setValue('03:59:00'); $this->assertEquals($f->dataValue(), '03:59:00'); } public function testLenientSubmissionParseWithoutSecondsOnHtml5() { $f = new TimeField('Time', 'Time'); $f->setSubmittedValue('23:59'); $this->assertEquals($f->Value(), '23:59:00'); } public function testHtml5WithCustomFormatThrowsException() { $this->expectException(\LogicException::class); $this->expectExceptionMessageMatches('/Please opt-out .* if using setTimeFormat/'); $f = new TimeField('Time', 'Time'); $f->setValue('15:59:00'); $f->setTimeFormat('mm:HH'); $f->Value(); } public function testHtml5WithCustomDateLengthThrowsException() { $this->expectException(\LogicException::class); $this->expectExceptionMessageMatches('/Please opt-out .* if using setTimeLength/'); $f = new TimeField('Time', 'Time'); $f->setValue('15:59:00'); $f->setTimeLength(IntlDateFormatter::MEDIUM); $f->Value(); } public function testHtml5WithCustomLocaleThrowsException() { $this->expectException(\LogicException::class); $this->expectExceptionMessageMatches('/Please opt-out .* if using setLocale/'); $f = new TimeField('Time', 'Time'); $f->setValue('15:59:00'); $f->setLocale('de_DE'); $f->Value(); } }