1<?php 2 3namespace Drupal\Tests\datetime\Kernel; 4 5use Drupal\Core\Datetime\DrupalDateTime; 6use Drupal\Core\DependencyInjection\DependencySerializationTrait; 7use Drupal\Core\Form\FormInterface; 8use Drupal\Core\Form\FormState; 9use Drupal\Core\Form\FormStateInterface; 10use Drupal\KernelTests\KernelTestBase; 11 12/** 13 * Tests serializing a form with an injected datetime instance. 14 * 15 * @group datetime 16 */ 17class DateTimeFormInjectionTest extends KernelTestBase implements FormInterface { 18 19 use DependencySerializationTrait; 20 21 /** 22 * A Dblog logger instance. 23 * 24 * @var \Psr\Log\LoggerInterface 25 */ 26 protected $logger; 27 28 /** 29 * Modules to enable. 30 * 31 * @var array 32 */ 33 protected static $modules = ['system', 'datetime']; 34 35 /** 36 * {@inheritdoc} 37 */ 38 protected function setUp(): void { 39 parent::setUp(); 40 $this->installSchema('system', ['sequences']); 41 } 42 43 /** 44 * {@inheritdoc} 45 */ 46 public function getFormId() { 47 return 'datetime_test_injection_form'; 48 } 49 50 /** 51 * Process callback. 52 * 53 * @param array $element 54 * Form element. 55 * 56 * @return array 57 * Processed element. 58 */ 59 public function process($element) { 60 return $element; 61 } 62 63 /** 64 * {@inheritdoc} 65 */ 66 public function buildForm(array $form, FormStateInterface $form_state) { 67 $form['datelist_element'] = [ 68 '#title' => 'datelist test', 69 '#type' => 'datelist', 70 '#default_value' => new DrupalDateTime('2000-01-01 00:00:00'), 71 '#date_part_order' => [ 72 'month', 73 'day', 74 'year', 75 'hour', 76 'minute', 'ampm', 77 ], 78 '#date_text_parts' => ['year'], 79 '#date_year_range' => '2010:2020', 80 '#date_increment' => 15, 81 ]; 82 $form['#process'][] = [$this, 'process']; 83 return $form; 84 } 85 86 /** 87 * {@inheritdoc} 88 */ 89 public function validateForm(array &$form, FormStateInterface $form_state) {} 90 91 /** 92 * {@inheritdoc} 93 */ 94 public function submitForm(array &$form, FormStateInterface $form_state) { 95 $this->assertTrue(TRUE); 96 $form_state->setRebuild(); 97 } 98 99 /** 100 * Tests custom string injection serialization. 101 */ 102 public function testDatetimeSerialization() { 103 $form_state = new FormState(); 104 $form_state->setRequestMethod('POST'); 105 $form_state->setCached(); 106 $form_builder = $this->container->get('form_builder'); 107 $form_id = $form_builder->getFormId($this, $form_state); 108 $form = $form_builder->retrieveForm($form_id, $form_state); 109 $form_builder->prepareForm($form_id, $form, $form_state); 110 // Set up $form_state so that the form is properly submitted. 111 $form_state->setUserInput(['form_id' => $form_id]); 112 $form_state->setProgrammed(); 113 $form_state->setSubmitted(); 114 $form_builder->processForm($form_id, $form, $form_state); 115 } 116 117} 118