assertTrue(defined('MAX_DB_PREFIX_LENGTH'), 'MAX_DB_PREFIX_LENGTH 상수가 정의되지 않았습니다.'); $this->assertSame(6, MAX_DB_PREFIX_LENGTH); } /** * 인스톨러 서버 검증과 동일한 판정식: strlen($prefix) > MAX_DB_PREFIX_LENGTH 면 거부. */ #[DataProvider('prefixProvider')] public function test_prefix_length_boundary(string $prefix, bool $shouldPass): void { $isRejected = strlen($prefix) > MAX_DB_PREFIX_LENGTH; $this->assertSame( $shouldPass, ! $isRejected, sprintf('prefix "%s" (%d자) 판정이 기대와 다릅니다.', $prefix, strlen($prefix)) ); } /** * @return array */ public static function prefixProvider(): array { return [ 'default g7_ (3자)' => ['g7_', true], 'g72_ (4자) — 이슈 재현 prefix' => ['g72_', true], '5자' => ['shop_', true], '경계 6자 통과' => ['mycomp', true], '경계 7자 거부' => ['mycomp_', false], '명백히 긴 10자 거부' => ['mycompany_', false], '빈 문자열 통과' => ['', true], ]; } /** * 허용 최대 prefix(6자) 와 가장 긴 자동 생성 인덱스명(58자)의 합이 * MySQL identifier 한도(64자) 이내임을 보장한다. */ public function test_max_prefix_plus_longest_auto_index_name_fits_identifier_limit(): void { $longestAutoIndexBaseLength = 58; // 작업1 이후 전역 자동 생성 인덱스명 최대치 $mysqlIdentifierLimit = 64; $this->assertLessThanOrEqual( $mysqlIdentifierLimit, MAX_DB_PREFIX_LENGTH + $longestAutoIndexBaseLength, '허용 최대 prefix + 최장 자동 인덱스명이 MySQL 한도를 초과합니다.' ); } }