Package com.asakusafw.compiler.repository

Source Code of com.asakusafw.compiler.repository.SpiWorkflowProcessorRepositoryTest$MockDesc2

/**
* Copyright 2011-2014 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.compiler.repository;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import org.hamcrest.Matcher;
import org.junit.Rule;
import org.junit.Test;

import com.asakusafw.compiler.batch.AbstractWorkDescriptionProcessor;
import com.asakusafw.compiler.batch.AbstractWorkflowProcessor;
import com.asakusafw.compiler.batch.BatchCompilerEnvironmentProvider;
import com.asakusafw.compiler.batch.WorkDescriptionProcessor;
import com.asakusafw.compiler.batch.Workflow;
import com.asakusafw.compiler.batch.WorkflowProcessor;
import com.asakusafw.compiler.flow.example.SimpleJobFlow;
import com.asakusafw.utils.collections.Lists;
import com.asakusafw.utils.collections.Sets;
import com.asakusafw.vocabulary.batch.JobFlowWorkDescription;
import com.asakusafw.vocabulary.batch.WorkDescription;

/**
* Test for {@link SpiWorkflowProcessorRepository}.
*/
public class SpiWorkflowProcessorRepositoryTest {

    /**
     * テスト環境。
     */
    @Rule
    public BatchCompilerEnvironmentProvider prov = new BatchCompilerEnvironmentProvider();

    /**
     * {@link SpiWorkflowProcessorRepository#findWorkflowProcessors(java.util.Set)}
     */
    @Test
    public void findWorkflowProcessors_simple() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc1(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        Set<WorkflowProcessor> processors = repo.findWorkflowProcessors(set(
                new MockDesc1()));
        assertThat(classes(processors), contains((Object) MockProc1.class));
    }

    /**
     * {@link SpiWorkflowProcessorRepository#findWorkflowProcessors(java.util.Set)}
     */
    @Test
    public void findWorkflowProcessors_multi() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc1(),
                        new MockProc2(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        Set<WorkflowProcessor> processors = repo.findWorkflowProcessors(set(
                new MockDesc1(),
                new MockDesc2()));
        assertThat(classes(processors), contains((Object) MockProc2.class));
    }

    /**
     * {@link SpiWorkflowProcessorRepository#findWorkflowProcessors(java.util.Set)}
     */
    @Test
    public void findWorkflowProcessors_super() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc3(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        Set<WorkflowProcessor> processors = repo.findWorkflowProcessors(set(
                new MockDesc1(),
                new MockDesc2(),
                new JobFlowWorkDescription(SimpleJobFlow.class)));
        assertThat(classes(processors), contains((Object) MockProc3.class));
    }

    /**
     * {@link SpiWorkflowProcessorRepository#findWorkflowProcessors(java.util.Set)}
     */
    @Test
    public void findWorkflowProcessors_containsUnknown() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc1(),
                        new MockProc2(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        Set<WorkflowProcessor> processors = repo.findWorkflowProcessors(set(
                new MockDesc1(),
                new JobFlowWorkDescription(SimpleJobFlow.class),
                new MockDesc2()));
        assertThat(processors.size(), is(0));
    }

    /**
     * {@link SpiWorkflowProcessorRepository#findDescriptionProcessor(WorkDescription)}.
     */
    @Test
    public void findDescriptionProcessor_simple() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc1(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        assertThat(
                repo.findDescriptionProcessor(new MockDesc1()),
                instanceOf(MockDescProc1.class));
        assertThat(
                repo.findDescriptionProcessor(new MockDesc2()),
                is(nullValue()));
    }

    /**
     * {@link SpiWorkflowProcessorRepository#findDescriptionProcessor(WorkDescription)}.
     */
    @Test
    public void findDescriptionProcessor_multi() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc1(),
                        new MockProc2(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        assertThat(
                repo.findDescriptionProcessor(new MockDesc1()),
                instanceOf(MockDescProc1.class));
        assertThat(
                repo.findDescriptionProcessor(new MockDesc2()),
                instanceOf(MockDescProc2.class));
    }

    /**
     * {@link SpiWorkflowProcessorRepository#findDescriptionProcessor(WorkDescription)}.
     */
    @Test
    public void findDescriptionProcessor_super() {
        SpiWorkflowProcessorRepository repo = new SpiWorkflowProcessorRepository() {
            @Override
            protected Iterable<? extends WorkflowProcessor> loadServices() {
                return Arrays.asList(new WorkflowProcessor[] {
                        new MockProc3(),
                });
            }
        };
        repo.initialize(prov.getEnvironment());
        assertThat(
                repo.findDescriptionProcessor(new MockDesc1()),
                instanceOf(MockDescProc3.class));
        assertThat(
                repo.findDescriptionProcessor(new MockDesc2()),
                instanceOf(MockDescProc3.class));
    }

    private Set<WorkDescription> set(WorkDescription... descriptions) {
        return Sets.from(descriptions);
    }

    private Set<Object> classes(Set<?> instances) {
        Set<Object> results = Sets.create();
        for (Object t : instances) {
            results.add(t.getClass());
        }
        return results;
    }

    private <T> Matcher<? super Set<T>> contains(T... values) {
        Set<T> expect = Sets.create();
        Collections.addAll(expect, values);
        return is(expect);
    }

    private static class MockProc1 extends AbstractWorkflowProcessor {
        public MockProc1() {
            return;
        }
        @Override
        public Collection<Class<? extends WorkDescriptionProcessor<?>>> getDescriptionProcessors() {
            List<Class<? extends WorkDescriptionProcessor<?>>> results = Lists.create();
            results.add(MockDescProc1.class);
            return results;
        }
        @Override
        public void process(Workflow workflow) throws IOException {
            return;
        }
    }

    private static class MockProc2 extends AbstractWorkflowProcessor {
        public MockProc2() {
            return;
        }
        @Override
        public Collection<Class<? extends WorkDescriptionProcessor<?>>> getDescriptionProcessors() {
            List<Class<? extends WorkDescriptionProcessor<?>>> results = Lists.create();
            results.add(MockDescProc1.class);
            results.add(MockDescProc2.class);
            return results;
        }
        @Override
        public void process(Workflow workflow) throws IOException {
            return;
        }
    }

    private static class MockProc3 extends AbstractWorkflowProcessor {
        public MockProc3() {
            return;
        }
        @Override
        public Collection<Class<? extends WorkDescriptionProcessor<?>>> getDescriptionProcessors() {
            List<Class<? extends WorkDescriptionProcessor<?>>> results = Lists.create();
            results.add(MockDescProc3.class);
            return results;
        }
        @Override
        public void process(Workflow workflow) throws IOException {
            return;
        }
    }

    private static class MockDescProc1 extends AbstractWorkDescriptionProcessor<MockDesc1> {
        @SuppressWarnings("unused")
        public MockDescProc1() {
            return;
        }
        @Override
        public Object process(MockDesc1 description) throws IOException {
            return null;
        }
    }

    private static class MockDescProc2 extends AbstractWorkDescriptionProcessor<MockDesc2> {
        @SuppressWarnings("unused")
        public MockDescProc2() {
            return;
        }
        @Override
        public Object process(MockDesc2 description) throws IOException {
            return null;
        }
    }

    private static class MockDescProc3 extends AbstractWorkDescriptionProcessor<WorkDescription> {
        @SuppressWarnings("unused")
        public MockDescProc3() {
            return;
        }
        @Override
        public Object process(WorkDescription description) throws IOException {
            return null;
        }
    }

    private static class MockDesc1 extends WorkDescription {
        public MockDesc1() {
            return;
        }
        @Override
        public String getName() {
            return "mockdesc1";
        }
    }

    private static class MockDesc2 extends WorkDescription {
        public MockDesc2() {
            return;
        }
        @Override
        public String getName() {
            return "mockdesc2";
        }
    }
}
TOP

Related Classes of com.asakusafw.compiler.repository.SpiWorkflowProcessorRepositoryTest$MockDesc2

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.