/* * Copyright © 2014 Cask Data, 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 co.cask.cdap.data2.dataset2; import co.cask.cdap.api.dataset.Dataset; import co.cask.cdap.api.dataset.DatasetSpecification; import co.cask.cdap.api.dataset.module.EmbeddedDataset; import org.junit.Assert; import org.junit.Test; import java.io.IOException; /** * */ public class SingleTypeModuleTest { @Test public void testCtorCheck() { assertGood(Good1.class); assertGood(Good2.class); assertGood(Good3.class); assertBad(Bad1.class); assertBad(Bad2.class); assertBad(Bad3.class); assertBad(Bad4.class); assertBad(Bad5.class); assertBad(Bad6.class); assertBad(Bad7.class); assertBad(Bad8.class); assertBad(Bad9.class); } private void assertGood(Class<? extends Dataset> cl) { Assert.assertNotNull(SingleTypeModule.findSuitableCtorOrFail(cl)); } private void assertBad(Class<? extends Dataset> cl) { try { SingleTypeModule.findSuitableCtorOrFail(cl); Assert.fail(); } catch (IllegalArgumentException e) { // expected } } public static final class Bad1 extends AbstractDataset { public Bad1() { } } public static final class Bad2 extends AbstractDataset { public Bad2(int i) { } } public static final class Bad3 extends AbstractDataset { public Bad3(Object o) { } } public static final class Good1 extends AbstractDataset { public Good1(DatasetSpecification spec) { } } public static final class Bad4 extends AbstractDataset { public Bad4(DatasetSpecification spec, int k) { } } public static final class Bad5 extends AbstractDataset { public Bad5(DatasetSpecification spec, Object foo) { } } public static final class Bad6 extends AbstractDataset { public Bad6(DatasetSpecification spec, Dataset ds) { } } public static final class Good2 extends AbstractDataset { public Good2(DatasetSpecification spec, @EmbeddedDataset("foo") Dataset ds) { } } public static final class Bad7 extends AbstractDataset { public Bad7(DatasetSpecification spec, @EmbeddedDataset("foo") Dataset ds, int i) { } } public static final class Good3 extends AbstractDataset { public Good3(DatasetSpecification spec, @EmbeddedDataset("foo") Dataset ds, @EmbeddedDataset("bar") Dataset bar) { } } public static final class Bad8 extends AbstractDataset { public Bad8(DatasetSpecification spec, @EmbeddedDataset("foo") Dataset ds, int i, @EmbeddedDataset("bar") Dataset bar) { } } public static final class Bad9 extends AbstractDataset { public Bad9(DatasetSpecification spec, DatasetSpecification spec2, @EmbeddedDataset("foo") Dataset ds) { } } public abstract static class AbstractDataset implements Dataset { @Override public void close() throws IOException { } } }