/** * Copyright 2011-2017 Asakusa Framework Team. * * 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.asakusafw.operator.builtin; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import javax.lang.model.element.ExecutableElement; import org.junit.Test; import com.asakusafw.operator.description.Descriptions; import com.asakusafw.operator.model.OperatorDescription; import com.asakusafw.operator.model.OperatorElement; import com.asakusafw.vocabulary.operator.MasterJoinUpdate; /** * Test for {@link MasterKindOperatorHelper}. */ public class MasterKindOperatorHelperTest extends OperatorDriverTestRoot { /** * Creates a new instance. */ public MasterKindOperatorHelperTest() { super(new MasterJoinUpdateOperatorDriver()); } /** * annotation. */ @Test public void annotationTypeName() { assertThat(driver.getAnnotationTypeName(), is(Descriptions.classOf(MasterJoinUpdate.class))); } /** * simple case. */ @Test public void simple() { compile(new Action("com.example.Simple") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(2)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(0)); } }); } /** * w/ selector method. */ @Test public void selector() { compile(new Action("com.example.WithSelector") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(2)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(0)); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(1)); } }); } /** * selector method w/ transaction input. */ @Test public void selector_transaction() { compile(new Action("com.example.SelectorWithTransaction") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(2)); } }); } /** * selector method w/ master input candidates as collection type. */ @Test public void selector_master_collection() { compile(new Action("com.example.SelectorWithMasterInputCollection") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(1)); } }); } /** * selector method w/ master input candidates as iterable type. */ @Test public void selector_master_iterable() { compile(new Action("com.example.SelectorWithMasterInputIterable") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(1)); } }); } /** * selector method w/ basic parameter. */ @Test public void selector_basic() { compile(new Action("com.example.SelectorWithBasic") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(2)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(1)); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(3)); assertThat(selector.getParameters().get(2).asType(), is(sameType(String.class))); } }); } /** * selector method w/ basic parameter but is ignored. */ @Test public void selector_basic_ignore() { compile(new Action("com.example.SelectorWithBasicIgnore") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(2)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(1)); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(2)); } }); } /** * selector method w/ view. */ @Test public void selector_view() { compile(new Action("com.example.SelectorWithView") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(3)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(0)); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(3)); assertThat(description.getInputs().get(2).getAttributes(), hasItem(flatView())); } }); } /** * selector method w/ group view. */ @Test public void selector_group_view() { compile(new Action("com.example.SelectorWithGroupView") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(3)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(0)); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(3)); assertThat(description.getInputs().get(2).getAttributes(), hasItem(groupView("=id"))); } }); } /** * selector method w/ group view as supertype. */ @Test public void selector_group_view_supertype() { compile(new Action("com.example.SelectorWithGroupViewSupertype") { @Override protected void perform(OperatorElement target) { OperatorDescription description = target.getDescription(); assertThat(description.getInputs().size(), is(3)); assertThat(description.getOutputs().size(), is(2)); assertThat(description.getArguments().size(), is(0)); ExecutableElement selector = description.getSupport(); assertThat(selector.getSimpleName().toString(), is("selector")); assertThat(selector.getParameters(), hasSize(3)); assertThat(description.getInputs().get(2).getAttributes(), hasItem(groupView("=id"))); } }); } /** * violates master input is data model type. */ @Test public void violate_master_input_data_model() { violate("com.example.ViolateMasterInputDataModel"); } /** * violates tx input is data model type. */ @Test public void violate_tx_input_data_model() { violate("com.example.ViolateTxInputDataModel"); } /** * violates selector method exists. */ @Test public void violate_selector_exist() { violate("com.example.ViolateSelectorExist"); } /** * violates selector method is identical. */ @Test public void violate_selector_identical() { violate("com.example.ViolateSelectorIdentical"); } /** * violates selector method is public. */ @Test public void violate_selector_public() { violate("com.example.ViolateSelectorPublic"); } /** * violates selector method is not abstract. */ @Test public void violate_selector_not_abstract() { violate("com.example.ViolateSelectorNotAbstract"); } /** * violates selector method is not static. */ @Test public void violate_selector_not_static() { violate("com.example.ViolateSelectorNotStatic"); } /** * violates selector method has consistent master type. */ @Test public void violate_selector_master_type_consistent() { violate("com.example.ViolateSelectorMasterInputConsistentType"); } /** * violates selector method has consistent tx type. */ @Test public void violate_selector_tx_type_consistent() { violate("com.example.ViolateSelectorTxInputConsistentType"); } /** * violates selector method has consistent return type. */ @Test public void violate_selector_return_type_consistent() { violate("com.example.ViolateSelectorReturnConsistentType"); } /** * violates selector method has consistent argument_type. */ @Test public void violate_selector_argument_type_consistent() { violate("com.example.ViolateSelectorArgumentConsistentType"); } /** * violates selector method has non-empty parameters. */ @Test public void violate_selector_parameter_not_empty() { violate("com.example.ViolateSelectorNotEmptyParameter"); } /** * violates selector method has less parameters. */ @Test public void violate_selector_parameter_less() { violate("com.example.ViolateSelectorLessParameter"); } /** * violates selector method has master input with list. */ @Test public void violate_selector_master_list_type() { violate("com.example.ViolateSelectorMasterInputList"); } /** * violates selector method has master input with parameterized list. */ @Test public void violate_selector_master_list_parameterized() { violate("com.example.ViolateSelectorMasterInputParameterizedList"); } }