/*
 * Copyright (C) 2009 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.i18n.phonenumbers;

import junit.framework.TestCase;

import java.io.InputStream;

/**
 * Unit tests for PhoneNumberUtil.java
 *
 * Note that these tests use the metadata contained in the file specified by TEST_META_DATA_FILE,
 * not the normal metadata file, so should not be used for regression test purposes - these tests
 * are illustrative only and test functionality.
 *
 * @author Shaopeng Jia
 */
public class AsYouTypeFormatterTest extends TestCase {
  private PhoneNumberUtil phoneUtil;
  private static final String TEST_META_DATA_FILE =
      "/com/google/i18n/phonenumbers/test/generated_files/PhoneNumberMetadataProtoForTesting";

  public AsYouTypeFormatterTest() {
    PhoneNumberUtil.resetInstance();
    InputStream in = PhoneNumberUtilTest.class.getResourceAsStream(TEST_META_DATA_FILE);
    phoneUtil = PhoneNumberUtil.getInstance(in);
  }

  public void testAsYouTypeFormatterUS() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("US");
    assertEquals("6", formatter.inputDigit('6'));
    assertEquals("65", formatter.inputDigit('5'));
    assertEquals("650", formatter.inputDigit('0'));
    assertEquals("6502", formatter.inputDigit('2'));
    assertEquals("65025", formatter.inputDigit('5'));
    assertEquals("650 253", formatter.inputDigit('3'));
    assertEquals("650 253 2", formatter.inputDigit('2'));
    assertEquals("650 253 22", formatter.inputDigit('2'));
    assertEquals("650 253 222", formatter.inputDigit('2'));
    assertEquals("650 253 2222", formatter.inputDigit('2'));

    formatter.clear();
    assertEquals("1", formatter.inputDigit('1'));
    assertEquals("16", formatter.inputDigit('6'));
    assertEquals("165", formatter.inputDigit('5'));
    assertEquals("1650", formatter.inputDigit('0'));
    assertEquals("16502", formatter.inputDigit('2'));
    assertEquals("1 650 25", formatter.inputDigit('5'));
    assertEquals("1 650 253", formatter.inputDigit('3'));
    assertEquals("1 650 253 2", formatter.inputDigit('2'));
    assertEquals("1 650 253 22", formatter.inputDigit('2'));
    assertEquals("1 650 253 222", formatter.inputDigit('2'));
    assertEquals("1 650 253 2222", formatter.inputDigit('2'));

    formatter.clear();
    assertEquals("1", formatter.inputDigitAndRememberPosition('1'));
    assertEquals(1, formatter.getRememberedPosition());
    assertEquals("16", formatter.inputDigit('6'));
    assertEquals("165", formatter.inputDigit('5'));
    assertEquals(1, formatter.getRememberedPosition());
    assertEquals("1650", formatter.inputDigitAndRememberPosition('0'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("16502", formatter.inputDigit('2'));
    assertEquals("1 650 25", formatter.inputDigit('5'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("1 650 253", formatter.inputDigit('3'));
    assertEquals("1 650 253 2", formatter.inputDigit('2'));
    assertEquals("1 650 253 22", formatter.inputDigit('2'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("1 650 253 222", formatter.inputDigitAndRememberPosition('2'));
    assertEquals(13, formatter.getRememberedPosition());
    assertEquals("1 650 253 2222", formatter.inputDigit('2'));
    assertEquals(13, formatter.getRememberedPosition());
    assertEquals("165025322222", formatter.inputDigit('2'));
    assertEquals(10, formatter.getRememberedPosition());
    assertEquals("1650253222222", formatter.inputDigit('2'));
    assertEquals(10, formatter.getRememberedPosition());

    formatter.clear();
    assertEquals("1", formatter.inputDigit('1'));
    assertEquals("16", formatter.inputDigit('6'));
    assertEquals("165", formatter.inputDigit('5'));
    assertEquals("1650", formatter.inputDigitAndRememberPosition('0'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("16502", formatter.inputDigit('2'));
    assertEquals("1 650 25", formatter.inputDigit('5'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("1 650 253", formatter.inputDigit('3'));
    assertEquals("1 650 253 2", formatter.inputDigit('2'));
    assertEquals("1 650 253 22", formatter.inputDigit('2'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("1 650 253 222", formatter.inputDigit('2'));
    assertEquals("1 650 253 2222", formatter.inputDigit('2'));
    assertEquals("165025322222", formatter.inputDigit('2'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("1650253222222", formatter.inputDigit('2'));
    assertEquals(4, formatter.getRememberedPosition());    

    formatter.clear();
    assertEquals("1", formatter.inputDigit('1'));
    assertEquals("16", formatter.inputDigit('6'));
    assertEquals("165", formatter.inputDigitAndRememberPosition('5'));
    assertEquals("1650", formatter.inputDigit('0'));
    assertEquals(3, formatter.getRememberedPosition());
    assertEquals("16502", formatter.inputDigit('2'));
    assertEquals("1 650 25", formatter.inputDigit('5'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("1 650 253", formatter.inputDigit('3'));
    assertEquals("1 650 253 2", formatter.inputDigit('2'));
    assertEquals("1 650 253 22", formatter.inputDigit('2'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("1 650 253 222", formatter.inputDigit('2'));
    assertEquals("1 650 253 2222", formatter.inputDigit('2'));
    assertEquals("165025322222", formatter.inputDigit('2'));
    assertEquals(3, formatter.getRememberedPosition());
    assertEquals("1650253222222", formatter.inputDigit('2'));
    assertEquals(3, formatter.getRememberedPosition());

    formatter.clear();
    assertEquals("6", formatter.inputDigit('6'));
    assertEquals("65", formatter.inputDigit('5'));
    assertEquals("650", formatter.inputDigit('0'));
    assertEquals("6502", formatter.inputDigit('2'));
    assertEquals("65025", formatter.inputDigitAndRememberPosition('5'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("650 253", formatter.inputDigit('3'));
    assertEquals(6, formatter.getRememberedPosition());
    assertEquals("650 253 2", formatter.inputDigit('2'));
    assertEquals("650 253 22", formatter.inputDigit('2'));
    assertEquals("650 253 222", formatter.inputDigit('2'));
    // No more formatting when semicolon is entered.
    assertEquals("650253222;", formatter.inputDigit(';'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("650253222;2", formatter.inputDigit('2'));

    formatter.clear();
    assertEquals("6", formatter.inputDigit('6'));
    assertEquals("65", formatter.inputDigit('5'));
    assertEquals("650", formatter.inputDigit('0'));
    // No more formatting when users choose to do their own formatting.
    assertEquals("650-", formatter.inputDigit('-'));
    assertEquals("650-2", formatter.inputDigitAndRememberPosition('2'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("650-25", formatter.inputDigit('5'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("650-253", formatter.inputDigit('3'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("650-253-", formatter.inputDigit('-'));
    assertEquals("650-253-2", formatter.inputDigit('2'));
    assertEquals("650-253-22", formatter.inputDigit('2'));
    assertEquals("650-253-222", formatter.inputDigit('2'));
    assertEquals("650-253-2222", formatter.inputDigit('2'));

    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("01", formatter.inputDigit('1'));
    assertEquals("011", formatter.inputDigit('1'));
    assertEquals("0114", formatter.inputDigitAndRememberPosition('4'));
    assertEquals("01148", formatter.inputDigit('8'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("011 48 8", formatter.inputDigit('8'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("011 48 88", formatter.inputDigit('8'));
    assertEquals("011 48 881", formatter.inputDigit('1'));
    assertEquals("011 48 88 12", formatter.inputDigit('2'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("011 48 88 123", formatter.inputDigit('3'));
    assertEquals("011 48 88 123 1", formatter.inputDigit('1'));
    assertEquals("011 48 88 123 12", formatter.inputDigit('2'));
    assertEquals("011 48 88 123 12 1", formatter.inputDigit('1'));
    assertEquals("011 48 88 123 12 12", formatter.inputDigit('2'));

    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("01", formatter.inputDigit('1'));
    assertEquals("011", formatter.inputDigit('1'));
    assertEquals("0114", formatter.inputDigit('4'));
    assertEquals("01144", formatter.inputDigit('4'));
    assertEquals("011 44 6", formatter.inputDigit('6'));
    assertEquals("011 44 61", formatter.inputDigit('1'));
    assertEquals("011 44 612", formatter.inputDigit('2'));
    assertEquals("011 44 6 123", formatter.inputDigit('3'));
    assertEquals("011 44 6 123 1", formatter.inputDigit('1'));
    assertEquals("011 44 6 123 12", formatter.inputDigit('2'));
    assertEquals("011 44 6 123 123", formatter.inputDigit('3'));
    assertEquals("011 44 6 123 123 1", formatter.inputDigit('1'));
    assertEquals("011 44 6 123 123 12", formatter.inputDigit('2'));
    assertEquals("011 44 6 123 123 123", formatter.inputDigit('3'));

    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("01", formatter.inputDigit('1'));
    assertEquals("011", formatter.inputDigit('1'));
    assertEquals("0115", formatter.inputDigit('5'));
    assertEquals("01154", formatter.inputDigit('4'));
    assertEquals("011 54 9", formatter.inputDigit('9'));
    assertEquals("011 54 91", formatter.inputDigit('1'));
    assertEquals("011 54 911", formatter.inputDigit('1'));
    assertEquals("011 54 9 11 2", formatter.inputDigit('2'));
    assertEquals("011 54 9 11 23", formatter.inputDigit('3'));
    assertEquals("011 54 9 11 231", formatter.inputDigit('1'));
    assertEquals("011 54 9 11 2312", formatter.inputDigit('2'));
    assertEquals("011 54 9 11 2312 1", formatter.inputDigit('1'));
    assertEquals("011 54 9 11 2312 12", formatter.inputDigit('2'));
    assertEquals("011 54 9 11 2312 123", formatter.inputDigit('3'));
    assertEquals("011 54 9 11 2312 1234", formatter.inputDigit('4'));

    formatter.clear();
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+1", formatter.inputDigit('1'));
    assertEquals("+16", formatter.inputDigitAndRememberPosition('6'));
    assertEquals("+165", formatter.inputDigit('5'));
    assertEquals("+1650", formatter.inputDigit('0'));
    assertEquals(3, formatter.getRememberedPosition());
    assertEquals("+1 650 2", formatter.inputDigit('2'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("+1 650 25", formatter.inputDigit('5'));
    assertEquals("+1 650 253", formatter.inputDigitAndRememberPosition('3'));
    assertEquals("+1 650 253 2", formatter.inputDigit('2'));
    assertEquals("+1 650 253 22", formatter.inputDigit('2'));
    assertEquals("+1 650 253 222", formatter.inputDigit('2'));
    assertEquals(10, formatter.getRememberedPosition());

    formatter.clear();
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+1", formatter.inputDigit('1'));
    assertEquals("+16", formatter.inputDigitAndRememberPosition('6'));
    assertEquals("+165", formatter.inputDigit('5'));
    assertEquals("+1650", formatter.inputDigit('0'));
    assertEquals(3, formatter.getRememberedPosition());
    assertEquals("+1 650 2", formatter.inputDigit('2'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("+1 650 25", formatter.inputDigit('5'));
    assertEquals("+1 650 253", formatter.inputDigit('3'));
    assertEquals("+1 650 253 2", formatter.inputDigit('2'));
    assertEquals("+1 650 253 22", formatter.inputDigit('2'));
    assertEquals("+1 650 253 222", formatter.inputDigit('2'));
    assertEquals("+1650253222;", formatter.inputDigit(';'));
    assertEquals(3, formatter.getRememberedPosition());

    formatter.clear();
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+4", formatter.inputDigit('4'));
    assertEquals("+48", formatter.inputDigit('8'));
    assertEquals("+488", formatter.inputDigit('8'));
    assertEquals("+4888", formatter.inputDigit('8'));
    assertEquals("+48 881", formatter.inputDigit('1'));
    assertEquals("+48 88 12", formatter.inputDigit('2'));
    assertEquals("+48 88 123", formatter.inputDigit('3'));
    assertEquals("+48 88 123 1", formatter.inputDigit('1'));
    assertEquals("+48 88 123 12", formatter.inputDigit('2'));
    assertEquals("+48 88 123 12 1", formatter.inputDigit('1'));
    assertEquals("+48 88 123 12 12", formatter.inputDigit('2'));

    // Test US number with full-width characters.
    formatter.clear();
    assertEquals("\uFF16", formatter.inputDigit('\uFF16'));
    assertEquals("\uFF16\uFF15", formatter.inputDigit('\uFF15'));
    assertEquals("\uFF16\uFF15\uFF10", formatter.inputDigit('\uFF10'));
    assertEquals("\uFF16\uFF15\uFF10\uFF12", formatter.inputDigit('\uFF12'));
    assertEquals("\uFF16\uFF15\uFF10\uFF12\uFF15", formatter.inputDigit('\uFF15'));
    assertEquals("650 253", formatter.inputDigit('\uFF13'));
    assertEquals("650 253 2", formatter.inputDigit('\uFF12'));
    assertEquals("650 253 22", formatter.inputDigit('\uFF12'));
    assertEquals("650 253 222", formatter.inputDigit('\uFF12'));
    assertEquals("650 253 2222", formatter.inputDigit('\uFF12'));

    // Mobile short code.
    formatter.clear();
    assertEquals("*", formatter.inputDigit('*'));
    assertEquals("*1", formatter.inputDigit('1'));
    assertEquals("*12", formatter.inputDigit('2'));
    assertEquals("*121", formatter.inputDigit('1'));
    assertEquals("*121#", formatter.inputDigit('#'));

    // Test vanity numbers.
    formatter.clear();
    assertEquals("8", formatter.inputDigit('8'));
    assertEquals("80", formatter.inputDigit('0'));
    assertEquals("800", formatter.inputDigit('0'));
    assertEquals("800 ", formatter.inputDigit(' '));
    assertEquals("800 M", formatter.inputDigit('M'));
    assertEquals("800 MY", formatter.inputDigit('Y'));
    assertEquals("800 MY ", formatter.inputDigit(' '));
    assertEquals("800 MY A", formatter.inputDigit('A'));
    assertEquals("800 MY AP", formatter.inputDigit('P'));
    assertEquals("800 MY APP", formatter.inputDigit('P'));
    assertEquals("800 MY APPL", formatter.inputDigit('L'));
    assertEquals("800 MY APPLE", formatter.inputDigit('E'));
  }

  public void testAsYouTypeFormatterGBFixedLine() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("GB");
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("02", formatter.inputDigit('2'));
    assertEquals("020", formatter.inputDigit('0'));
    assertEquals("0207", formatter.inputDigitAndRememberPosition('7'));
    assertEquals(4, formatter.getRememberedPosition());
    assertEquals("02070", formatter.inputDigit('0'));
    assertEquals("020 703", formatter.inputDigit('3'));
    assertEquals(5, formatter.getRememberedPosition());
    assertEquals("020 7031", formatter.inputDigit('1'));
    assertEquals("020 7031 3", formatter.inputDigit('3'));
    assertEquals("020 7031 30", formatter.inputDigit('0'));
    assertEquals("020 7031 300", formatter.inputDigit('0'));
    assertEquals("020 7031 3000", formatter.inputDigit('0'));
  }

  public void testAsYouTypeFormatterGBTollFree() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("gb");
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("08", formatter.inputDigit('8'));
    assertEquals("080", formatter.inputDigit('0'));
    assertEquals("0807", formatter.inputDigit('7'));
    assertEquals("08070", formatter.inputDigit('0'));
    assertEquals("080 703", formatter.inputDigit('3'));
    assertEquals("080 7031", formatter.inputDigit('1'));
    assertEquals("080 7031 3", formatter.inputDigit('3'));
    assertEquals("080 7031 30", formatter.inputDigit('0'));
    assertEquals("080 7031 300", formatter.inputDigit('0'));
    assertEquals("080 7031 3000", formatter.inputDigit('0'));
  }

  public void testAsYouTypeFormatterGBPremiumRate() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("GB");
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("09", formatter.inputDigit('9'));
    assertEquals("090", formatter.inputDigit('0'));
    assertEquals("0907", formatter.inputDigit('7'));
    assertEquals("09070", formatter.inputDigit('0'));
    assertEquals("090 703", formatter.inputDigit('3'));
    assertEquals("090 7031", formatter.inputDigit('1'));
    assertEquals("090 7031 3", formatter.inputDigit('3'));
    assertEquals("090 7031 30", formatter.inputDigit('0'));
    assertEquals("090 7031 300", formatter.inputDigit('0'));
    assertEquals("090 7031 3000", formatter.inputDigit('0'));
  }

  public void testAsYouTypeFormatterNZMobile() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("NZ");
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("02", formatter.inputDigit('2'));
    assertEquals("021", formatter.inputDigit('1'));
    assertEquals("0211", formatter.inputDigit('1'));
    assertEquals("02112", formatter.inputDigit('2'));
    assertEquals("02-112 3", formatter.inputDigit('3'));
    assertEquals("02-112 34", formatter.inputDigit('4'));
    assertEquals("02-112 345", formatter.inputDigit('5'));
    assertEquals("02-112 3456", formatter.inputDigit('6'));
  }

  public void testAsYouTypeFormatterDE() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("DE");
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("03", formatter.inputDigit('3'));
    assertEquals("030", formatter.inputDigit('0'));
    assertEquals("0301", formatter.inputDigit('1'));
    assertEquals("03012", formatter.inputDigit('2'));
    assertEquals("030 123", formatter.inputDigit('3'));
    assertEquals("030 1234", formatter.inputDigit('4'));
  }

  public void testAsYouTypeFormatterAR() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("AR");
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("01", formatter.inputDigit('1'));
    assertEquals("011", formatter.inputDigit('1'));
    assertEquals("0117", formatter.inputDigit('7'));
    assertEquals("01170", formatter.inputDigit('0'));
    assertEquals("011 703", formatter.inputDigit('3'));
    assertEquals("011 7031", formatter.inputDigit('1'));
    assertEquals("011 7031-3", formatter.inputDigit('3'));
    assertEquals("011 7031-30", formatter.inputDigit('0'));
    assertEquals("011 7031-300", formatter.inputDigit('0'));
    assertEquals("011 7031-3000", formatter.inputDigit('0'));
  }

  public void testAsYouTypeFormatterARMobile() {
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("AR");
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+5", formatter.inputDigit('5'));
    assertEquals("+54", formatter.inputDigit('4'));
    assertEquals("+549", formatter.inputDigit('9'));
    assertEquals("+5491", formatter.inputDigit('1'));
    assertEquals("+54 911", formatter.inputDigit('1'));
    assertEquals("+54 9 11 2", formatter.inputDigit('2'));
    assertEquals("+54 9 11 23", formatter.inputDigit('3'));
    assertEquals("+54 9 11 231", formatter.inputDigit('1'));
    assertEquals("+54 9 11 2312", formatter.inputDigit('2'));
    assertEquals("+54 9 11 2312 1", formatter.inputDigit('1'));
    assertEquals("+54 9 11 2312 12", formatter.inputDigit('2'));
    assertEquals("+54 9 11 2312 123", formatter.inputDigit('3'));
    assertEquals("+54 9 11 2312 1234", formatter.inputDigit('4'));
  }

  public void testAsYouTypeFormatterKR() {
    // +82 51 234 5678
    AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("KR");
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+8", formatter.inputDigit('8'));
    assertEquals("+82", formatter.inputDigit('2'));
    assertEquals("+825", formatter.inputDigit('5'));
    assertEquals("+8251", formatter.inputDigit('1'));
    assertEquals("+82 512", formatter.inputDigit('2'));
    assertEquals("+82 51-23", formatter.inputDigit('3'));
    assertEquals("+82 51-234", formatter.inputDigit('4'));
    assertEquals("+82 51-234-5", formatter.inputDigit('5'));
    assertEquals("+82 51-234-56", formatter.inputDigit('6'));
    assertEquals("+82 51-234-567", formatter.inputDigit('7'));
    assertEquals("+82 51-234-5678", formatter.inputDigit('8'));

    // +82 2 531 5678
    formatter.clear();
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+8", formatter.inputDigit('8'));
    assertEquals("+82", formatter.inputDigit('2'));
    assertEquals("+822", formatter.inputDigit('2'));
    assertEquals("+8225", formatter.inputDigit('5'));
    assertEquals("+82 253", formatter.inputDigit('3'));
    assertEquals("+82 2-531", formatter.inputDigit('1'));
    assertEquals("+82 2-531-5", formatter.inputDigit('5'));
    assertEquals("+82 2-531-56", formatter.inputDigit('6'));
    assertEquals("+82 2-531-567", formatter.inputDigit('7'));
    assertEquals("+82 2-531-5678", formatter.inputDigit('8'));

    // +82 2 3665 5678
    formatter.clear();
    assertEquals("+", formatter.inputDigit('+'));
    assertEquals("+8", formatter.inputDigit('8'));
    assertEquals("+82", formatter.inputDigit('2'));
    assertEquals("+822", formatter.inputDigit('2'));
    assertEquals("+8223", formatter.inputDigit('3'));
    assertEquals("+82 236", formatter.inputDigit('6'));
    assertEquals("+82 2-366", formatter.inputDigit('6'));
    assertEquals("+82 2-3665", formatter.inputDigit('5'));
    assertEquals("+82 2-3665-5", formatter.inputDigit('5'));
    assertEquals("+82 2-3665-56", formatter.inputDigit('6'));
    assertEquals("+82 2-3665-567", formatter.inputDigit('7'));
    assertEquals("+82 2-3665-5678", formatter.inputDigit('8'));

    // 02-114 : This is too short to format. Checking that there are no side-effects.
    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("02", formatter.inputDigit('2'));
    assertEquals("021", formatter.inputDigit('1'));
    assertEquals("0211", formatter.inputDigit('1'));
    assertEquals("02114", formatter.inputDigit('4'));

    // 02-1300
    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("02", formatter.inputDigit('2'));
    assertEquals("021", formatter.inputDigit('1'));
    assertEquals("0213", formatter.inputDigit('3'));
    assertEquals("02130", formatter.inputDigit('0'));
    assertEquals("02-1300", formatter.inputDigit('0'));

    // 011-456-7890
    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("01", formatter.inputDigit('1'));
    assertEquals("011", formatter.inputDigit('1'));
    assertEquals("0114", formatter.inputDigit('4'));
    assertEquals("01145", formatter.inputDigit('5'));
    assertEquals("011-456", formatter.inputDigit('6'));
    assertEquals("011-456-7", formatter.inputDigit('7'));
    assertEquals("011-456-78", formatter.inputDigit('8'));
    assertEquals("011-456-789", formatter.inputDigit('9'));
    assertEquals("011-456-7890", formatter.inputDigit('0'));

    // 011-9876-7890
    formatter.clear();
    assertEquals("0", formatter.inputDigit('0'));
    assertEquals("01", formatter.inputDigit('1'));
    assertEquals("011", formatter.inputDigit('1'));
    assertEquals("0119", formatter.inputDigit('9'));
    assertEquals("01198", formatter.inputDigit('8'));
    assertEquals("011-987", formatter.inputDigit('7'));
    assertEquals("011-9876", formatter.inputDigit('6'));
    assertEquals("011-9876-7", formatter.inputDigit('7'));
    assertEquals("011-9876-78", formatter.inputDigit('8'));
    assertEquals("011-9876-789", formatter.inputDigit('9'));
    assertEquals("011-9876-7890", formatter.inputDigit('0'));
  }
}
