//////////////////////////////////////////////////////////////////////////////// // checkstyle: Checks Java source code for adherence to a set of rules. // Copyright (C) 2001-2017 the original author or authors. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //////////////////////////////////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import org.apache.commons.beanutils.ConversionException; import org.junit.Test; import com.puppycrawl.tools.checkstyle.DefaultConfiguration; import com.puppycrawl.tools.checkstyle.DefaultContext; public class AutomaticBeanTest { @Test public void testConfigureNoSuchAttribute() { final TestBean testBean = new TestBean(); final DefaultConfiguration conf = new DefaultConfiguration("testConf"); conf.addAttribute("NonExisting", "doesn't matter"); try { testBean.configure(conf); } catch (CheckstyleException ex) { assertNull(ex.getCause()); assertTrue(ex.getMessage().startsWith("Property '" + "NonExisting" + "' in module ")); } } @Test public void testConfigureNoSuchAttribute2() { final TestBean testBean = new TestBean(); final DefaultConfiguration conf = new DefaultConfiguration("testConf"); conf.addAttribute("privateField", "doesn't matter"); try { testBean.configure(conf); } catch (CheckstyleException ex) { assertNull(ex.getCause()); assertTrue(ex.getMessage().startsWith("Property '" + "privateField" + "' in module ")); } } @Test public void testSetupChildFromBaseClass() throws CheckstyleException { final TestBean testBean = new TestBean(); testBean.setupChild(null); } @Test public void testSetupInvalidChildFromBaseClass() throws Exception { final TestBean testBean = new TestBean(); final DefaultConfiguration parentConf = new DefaultConfiguration("parentConf"); final DefaultConfiguration childConf = new DefaultConfiguration("childConf"); final Field field = AutomaticBean.class.getDeclaredField("configuration"); field.setAccessible(true); field.set(testBean, parentConf); try { testBean.setupChild(childConf); fail("expecting checkstyle exception"); } catch (CheckstyleException ex) { assertEquals("expected exception", "childConf is not allowed as a " + "child in parentConf. Please review 'Parent Module' section " + "for this Check in web documentation if Check is standard.", ex.getMessage()); } } @Test public void testContextualizeInvocationTargetException() { final TestBean testBean = new TestBean(); final DefaultContext context = new DefaultContext(); context.add("exceptionalMethod", 123.0f); try { testBean.contextualize(context); fail("InvocationTargetException is expected"); } catch (CheckstyleException ex) { assertTrue(ex.getCause() instanceof InvocationTargetException); assertTrue(ex.getMessage().startsWith("Cannot set property ")); } } @Test public void testContextualizeConversionException() { final TestBean testBean = new TestBean(); final DefaultContext context = new DefaultContext(); context.add("val", "some string"); try { testBean.contextualize(context); fail("InvocationTargetException is expected"); } catch (CheckstyleException ex) { assertTrue(ex.getCause() instanceof ConversionException); assertTrue(ex.getMessage().startsWith("illegal value ")); } } @Test public void testTestBean() { final TestBean testBean = new TestBean(); testBean.setVal(0); testBean.setWrong("wrongVal"); try { testBean.setExceptionalMethod("someValue"); fail("exception expected"); } catch (IllegalStateException ex) { assertEquals("null,wrongVal,0,someValue", ex.getMessage()); } } private static class TestBean extends AutomaticBean { private String privateField; private String wrong; private int val; public void setWrong(String wrong) { this.wrong = wrong; } public void setVal(int val) { this.val = val; } public void setExceptionalMethod(String value) { throw new IllegalStateException(privateField + "," + wrong + "," + val + "," + value); } public void doSmth() { privateField = "some value, just for fun"; } } }