import org.junit.Test; import static org.junit.Assert.*; public class IbanValidatorTest { static final String VALID = "TR330006100519786457841326"; @Test public void validIban() { assertTrue(IbanValidator.isValid(VALID)); } @Test public void validWithSpacesAndLowercase() { assertTrue(IbanValidator.isValid("tr33 0006 1005 1978 6457 8413 26")); } @Test public void secondValidIban() { assertTrue(IbanValidator.isValid("TR650001000000000000123456")); } @Test public void wrongCheckDigits() { assertFalse(IbanValidator.isValid("TR340006100519786457841326")); } @Test public void wrongLength() { assertFalse(IbanValidator.isValid("TR33000610051978645784132")); } @Test public void wrongCountry() { assertFalse(IbanValidator.isValid("DE330006100519786457841326")); } @Test public void nonDigitCharacter() { assertFalse(IbanValidator.isValid("TR33000610051978645784132X")); } @Test public void reservedDigitMustBeZero() { // mod-97 açısından geçerli ama ayrılmış hane 0 değil assertFalse(IbanValidator.isValid("TR080006110519786457841326")); } @Test public void nullRejected() { assertThrows(IllegalArgumentException.class, () -> IbanValidator.isValid(null)); } @Test public void bankCode() { assertEquals("00061", IbanValidator.bankCode(VALID)); } @Test public void bankCodeOfInvalidThrows() { assertThrows(IllegalArgumentException.class, () -> IbanValidator.bankCode("TR340006100519786457841326")); } @Test public void format() { assertEquals("TR33 0006 1005 1978 6457 8413 26", IbanValidator.format(VALID)); } @Test public void mod97OfKnownValue() { assertEquals(1, IbanValidator.mod97("0006100519786457841326TR33")); } }