Skip to content

fix: EgovStringUtil.alignLeft 생략 표기 시 원본 전체가 앞에 붙는 문제 수정 - #302

Open
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/stringutil-alignleft-ellipsis
Open

fix: EgovStringUtil.alignLeft 생략 표기 시 원본 전체가 앞에 붙는 문제 수정#302
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/stringutil-alignleft-ellipsis

Conversation

@z3rotig4r

Copy link
Copy Markdown
Contributor

변경 이유

EgovStringUtil.alignLeft(str, length, true)는 원본이 지정 길이보다 길 때 결과 길이가 지정 길이를 넘습니다. 결과 버퍼를 new StringBuilder(str)로 만들어 원본 전체를 이미 담은 상태에서, 잘라낸 앞부분과 "..."를 뒤에 다시 붙이기 때문입니다.

EgovStringUtil.alignLeft("abcdefghij", 5, true);   // "abcdefghijab..." (15자)

같은 클래스의 alignRight, alignCenter는 버퍼를 new StringBuilder(length)로 시작해 생략 표기가 지정 길이 안에 들어갑니다. 위와 같은 입력에 "ab..."를 반환합니다. 세 메서드는 정렬 방향만 다를 뿐 생략 표기 규칙은 같아야 하므로, 형제 메서드의 동작을 기준으로 alignLeft를 맞췄습니다.

str = "abcdefghij" 기준 실측 대조입니다.

length 수정 전 alignLeft 수정 후 alignLeft alignRight (참고)
3 abcdefghij... ... ...
5 abcdefghijab... ab... ab...
10 abcdefghij abcdefghij abcdefghij

수정 후에는 alignLeft의 출력이 전 구간에서 alignRight, alignCenter와 일치합니다.

변경 내용

  • alignLeft(String, int, boolean)의 버퍼 초기화를 new StringBuilder(str)에서 new StringBuilder(length)로 바꾸고 패딩 경로에서 원본을 append(str)로 붙입니다. alignRight와 같은 형태입니다.
  • EgovStringUtilTesttestAlignStringWithEllipsis를 추가했습니다. 세 메서드의 생략 표기, 자르기, 패딩, 빈 문자열, null 입력을 한자리에서 검증합니다.

테스트 방법

mvn -pl Foundation/org.egovframe.rte.fdl.string test

Tests run: 55, Failures: 0, Errors: 0으로 통과했습니다. 수정 전 코드로 되돌리면 새 테스트가 아래와 같이 실패해, 결함을 그대로 잡아냅니다.

testAlignStringWithEllipsis
expected: <ab...> but was: <abcdefghijab...>

영향 범위

  • 출력이 달라지는 경우는 isEllipsistrue이면서 원본이 지정 길이보다 긴 경로뿐입니다. isEllipsisfalse인 경로는 length가 0 이상인 전 구간에서 출력이 같습니다. 패딩 경로와 빈 문자열, 길이가 정확히 같거나 미달인 경우도 그대로입니다.
  • 실행환경과 공통컴포넌트를 훑어보면 alignLeft, alignRight, alignCenter를 호출하는 곳이 유틸 자신 외에는 없습니다. 기존 출력에 기대어 동작하는 코드는 발견되지 않았습니다.
  • length에 음수를 넘기면 예외 타입이 StringIndexOutOfBoundsException에서 NegativeArraySizeException으로 바뀝니다. alignRight, alignCenter가 이미 같은 예외를 내던 자리라 세 메서드의 동작이 맞춰지는 방향입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant