/** * Рекурсивная фильтрация ключей и значений массива через callback-функцию. * * Функция проверяет значение на четность. Останутся только нечетные элементы. * * Поскольку Флаг ARRAY_FILTER_USE_BOTH для подмассива неоднозначен, определим такое поведение callback-функции: * если полученное значение - массив, тогда проверим на четность ключ, к которому этот подмассив назначен. Иначе * проверяем на четность элемент. Вообще мне трудно придумать какую-то вразумительную ситуацию, когда могла бы * потребоваться фильтрация многомерного массива и по ключам и по значениям. */ public function test_array_filter_recursive_both() { $arr = [[11, 12, 13, 14], [15, 16, 17, 18], [2, 4, 6], [19, 20]]; $arr = Arrays::array_filter_recursive($arr, function ($val, $key) { return is_array($val) ? $key & 1 : $val & 1; }, ARRAY_FILTER_USE_BOTH); $expect = [1 => [0 => 15, 2 => 17], 3 => [19]]; $this->assertEquals($expect, $arr, 'Рекурсивная фильтрация ключей и значений массива через callback-функцию'); }
/** * Пробуем пробить валидаторы * * Результаты можно получить несколькими способами, аналогично с self::test_validate() * * Прим.: пересоздаем модель формы, т.к. ее повторное использование не предусмотрено. */ public function test_invalid_data() { self::setUpBeforeClass(); $form = self::$form; $data = ['app_path' => '\\valid\\path\\tooLong', 'app_namespace' => null, 'email' => '*****@*****.**', 'db' => ['switch' => 'on', 'base' => [' my_base ', 'base2']], 'modules' => ' user ']; $result = $form->load($data)->validate(); $this->assertFalse($result, 'Валидация не прошла'); $this->assertFalse($form->isValid(), 'Результат проведенной валидации - неверные данные'); $this->assertTrue($form->hasErrors(), 'Есть ошибки валидации'); $errorsByField = Arrays::array_filter_recursive($form->getErrorsAsString()); $this->assertEquals(5, count($errorsByField), 'Есть ошибки по 5 полям'); }