blob: 3262140df0a9ec8ad66d4aa98bb68e07bdaffe16 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.onlab.junit;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.onlab.junit.UtilityClassChecker.assertThatClassIsUtility;
/**
* Set of unit tests to check the implementation of the utility class
* checker.
*/
public class UtilityClassCheckerTest {
// CHECKSTYLE:OFF test data intentionally not final
/**
* Test class for non final class check.
*/
static class NonFinal {
private NonFinal() { }
}
// CHECKSTYLE:ON
/**
* Check that a non final class correctly produces an error.
* @throws Exception if any of the reflection lookups fail.
*/
@Test
public void testNonFinalClass() throws Exception {
boolean gotException = false;
try {
assertThatClassIsUtility(NonFinal.class);
} catch (AssertionError assertion) {
assertThat(assertion.getMessage(),
containsString("is not final"));
gotException = true;
}
assertThat(gotException, is(true));
}
/**
* Test class for final no constructor class check.
*/
static final class FinalNoConstructor {
}
/**
* Check that a final class with no declared constructor correctly produces
* an error. In this case, the compiler generates a default constructor
* for you, but the constructor is 'protected' and will fail the check.
*
* @throws Exception if any of the reflection lookups fail.
*/
@Test
public void testFinalNoConstructorClass() throws Exception {
boolean gotException = false;
try {
assertThatClassIsUtility(FinalNoConstructor.class);
} catch (AssertionError assertion) {
assertThat(assertion.getMessage(),
containsString("class with a default constructor that " +
"is not private"));
gotException = true;
}
assertThat(gotException, is(true));
}
/**
* Test class for class with more than one constructor check.
*/
static final class TwoConstructors {
private TwoConstructors() { }
private TwoConstructors(int x) { }
}
/**
* Check that a non static class correctly produces an error.
* @throws Exception if any of the reflection lookups fail.
*/
@Test
public void testOnlyOneConstructor() throws Exception {
boolean gotException = false;
try {
assertThatClassIsUtility(TwoConstructors.class);
} catch (AssertionError assertion) {
assertThat(assertion.getMessage(),
containsString("more than one constructor"));
gotException = true;
}
assertThat(gotException, is(true));
}
/**
* Test class with a non private constructor.
*/
static final class NonPrivateConstructor {
protected NonPrivateConstructor() { }
}
/**
* Check that a class with a non private constructor correctly
* produces an error.
* @throws Exception if any of the reflection lookups fail.
*/
@Test
public void testNonPrivateConstructor() throws Exception {
boolean gotException = false;
try {
assertThatClassIsUtility(NonPrivateConstructor.class);
} catch (AssertionError assertion) {
assertThat(assertion.getMessage(),
containsString("constructor that is not private"));
gotException = true;
}
assertThat(gotException, is(true));
}
/**
* Test class with a non static method.
*/
static final class NonStaticMethod {
private NonStaticMethod() { }
public void aPublicMethod() { }
}
/**
* Check that a class with a non static method correctly produces an error.
* @throws Exception if any of the reflection lookups fail.
*/
@Test
public void testNonStaticMethod() throws Exception {
boolean gotException = false;
try {
assertThatClassIsUtility(NonStaticMethod.class);
} catch (AssertionError assertion) {
assertThat(assertion.getMessage(),
containsString("one or more non-static methods"));
gotException = true;
}
assertThat(gotException, is(true));
}
}