11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2006 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License.
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.AssertionFailedError;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit test for {@link Preconditions}.
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true)
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class PreconditionsTest extends TestCase {
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_simple_success() {
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkArgument(true);
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_simple_failure() {
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkArgument(false);
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_simpleMessage_success() {
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkArgument(true, IGNORE_ME);
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_simpleMessage_failure() {
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkArgument(false, new Message());
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      verifySimpleMessage(expected);
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_nullMessage_failure() {
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkArgument(false, null);
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("null", expected.getMessage());
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_complexMessage_success() {
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkArgument(true, "%s", IGNORE_ME);
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckArgument_complexMessage_failure() {
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkArgument(false, FORMAT, 5);
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      verifyComplexMessage(expected);
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_simple_success() {
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkState(true);
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_simple_failure() {
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkState(false);
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalStateException expected) {
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_simpleMessage_success() {
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkState(true, IGNORE_ME);
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_simpleMessage_failure() {
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkState(false, new Message());
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalStateException expected) {
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      verifySimpleMessage(expected);
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_nullMessage_failure() {
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkState(false, null);
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalStateException expected) {
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("null", expected.getMessage());
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_complexMessage_success() {
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkState(true, "%s", IGNORE_ME);
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckState_complexMessage_failure() {
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkState(false, FORMAT, 5);
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalStateException expected) {
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      verifyComplexMessage(expected);
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final String NON_NULL_STRING = "foo";
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckNotNull_simple_success() {
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    String result = Preconditions.checkNotNull(NON_NULL_STRING);
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertSame(NON_NULL_STRING, result);
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckNotNull_simple_failure() {
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkNotNull(null);
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (NullPointerException expected) {
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckNotNull_simpleMessage_success() {
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    String result = Preconditions.checkNotNull(NON_NULL_STRING, IGNORE_ME);
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertSame(NON_NULL_STRING, result);
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckNotNull_simpleMessage_failure() {
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkNotNull(null, new Message());
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (NullPointerException expected) {
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      verifySimpleMessage(expected);
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckNotNull_complexMessage_success() {
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    String result = Preconditions.checkNotNull(
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        NON_NULL_STRING, "%s", IGNORE_ME);
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertSame(NON_NULL_STRING, result);
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckNotNull_complexMessage_failure() {
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkNotNull(null, FORMAT, 5);
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail("no exception thrown");
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (NullPointerException expected) {
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      verifyComplexMessage(expected);
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckElementIndex_ok() {
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(0, Preconditions.checkElementIndex(0, 1));
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(0, Preconditions.checkElementIndex(0, 2));
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(1, Preconditions.checkElementIndex(1, 2));
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckElementIndex_badSize() {
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkElementIndex(1, -1);
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      // don't care what the message text is, as this is an invalid usage of
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      // the Preconditions class, unlike all the other exceptions it throws
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckElementIndex_negative() {
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkElementIndex(-1, 1);
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("index (-1) must not be negative", expected.getMessage());
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckElementIndex_tooHigh() {
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkElementIndex(1, 1);
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("index (1) must be less than size (1)",
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckElementIndex_withDesc_negative() {
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkElementIndex(-1, 1, "foo");
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("foo (-1) must not be negative", expected.getMessage());
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckElementIndex_withDesc_tooHigh() {
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkElementIndex(1, 1, "foo");
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("foo (1) must be less than size (1)",
2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_ok() {
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(0, Preconditions.checkPositionIndex(0, 0));
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(0, Preconditions.checkPositionIndex(0, 1));
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(1, Preconditions.checkPositionIndex(1, 1));
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_badSize() {
2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndex(1, -1);
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      // don't care what the message text is, as this is an invalid usage of
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      // the Preconditions class, unlike all the other exceptions it throws
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_negative() {
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndex(-1, 1);
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("index (-1) must not be negative", expected.getMessage());
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_tooHigh() {
2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndex(2, 1);
2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("index (2) must not be greater than size (1)",
2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_withDesc_negative() {
2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndex(-1, 1, "foo");
2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("foo (-1) must not be negative", expected.getMessage());
2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_withDesc_tooHigh() {
2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndex(2, 1, "foo");
2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("foo (2) must not be greater than size (1)",
2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndexes_ok() {
2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkPositionIndexes(0, 0, 0);
2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkPositionIndexes(0, 0, 1);
2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkPositionIndexes(0, 1, 1);
2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    Preconditions.checkPositionIndexes(1, 1, 1);
2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndexes_badSize() {
2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndexes(1, 1, -1);
2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IllegalArgumentException expected) {
2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndex_startNegative() {
2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndexes(-1, 1, 1);
2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("start index (-1) must not be negative",
3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndexes_endTooHigh() {
3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndexes(0, 2, 1);
3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("end index (2) must not be greater than size (1)",
3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCheckPositionIndexes_reversed() {
3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    try {
3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      Preconditions.checkPositionIndexes(1, 0, 1);
3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      fail();
3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    } catch (IndexOutOfBoundsException expected) {
3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals("end index (0) must not be less than start index (1)",
3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          expected.getMessage());
3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testFormat() {
3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("%s", Preconditions.format("%s"));
3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("5", Preconditions.format("%s", 5));
3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("foo [5]", Preconditions.format("foo", 5));
3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("foo [5, 6, 7]", Preconditions.format("foo", 5, 6, 7));
3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("%s 1 2", Preconditions.format("%s %s %s", "%s", 1, 2));
3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals(" [5, 6]", Preconditions.format("", 5, 6));
3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("123", Preconditions.format("%s%s%s", 1, 2, 3));
3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("1%s%s", Preconditions.format("%s%s%s", 1));
3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("5 + 6 = 11", Preconditions.format("%s + 6 = 11", 5));
3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("5 + 6 = 11", Preconditions.format("5 + %s = 11", 6));
3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("5 + 6 = 11", Preconditions.format("5 + 6 = %s", 11));
3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("5 + 6 = 11", Preconditions.format("%s + %s = %s", 5, 6, 11));
3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("null [null, null]",
3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        Preconditions.format("%s", null, null, null));
3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("null [5, 6]", Preconditions.format(null, 5, 6));
3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("NullPointerTester")
3447dd252788645e940eada959bdde927426e2531c9Paul Duffin  public void testNullPointers() {
3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    NullPointerTester tester = new NullPointerTester();
3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    tester.testAllPublicStaticMethods(Preconditions.class);
3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final Object IGNORE_ME = new Object() {
3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public String toString() {
3510888a09821a98ac0680fad765217302858e70fa4Paul Duffin      throw new AssertionFailedError();
3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  };
3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static class Message {
3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    boolean invoked;
3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    @Override public String toString() {
3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertFalse(invoked);
3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      invoked = true;
3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      return "A message";
3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final String FORMAT = "I ate %s pies.";
3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void verifySimpleMessage(Exception e) {
3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("A message", e.getMessage());
3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static void verifyComplexMessage(Exception e) {
3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    assertEquals("I ate 5 pies.", e.getMessage());
3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
374