All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.reficio.ws.test.spock.ServerExtension.groovy Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2012-2013 Reficio (TM) - Reestablish your software!. All Rights Reserved.
 *
 * 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.reficio.ws.test.spock

import org.reficio.ws.test.ServerProcessor
import org.spockframework.runtime.AbstractRunListener
import org.spockframework.runtime.extension.AbstractAnnotationDrivenExtension
import org.spockframework.runtime.model.FeatureInfo
import org.spockframework.runtime.model.SpecInfo

/**
 * @author: Tom Bujok ([email protected])
 *
 * Reficio™ - Reestablish your software!
 * www.reficio.org
 */
class ServerExtension extends AbstractAnnotationDrivenExtension {

    def featureAnnotations = [:]

    void visitSpecAnnotation(Server annotation, SpecInfo spec) {
        spec.addListener(new AbstractRunListener() {

            private ServerProcessor processor

            @Override
            public void beforeSpec(SpecInfo specInfo) {
                processor = new ServerProcessor(annotation, spec.getClass())
                processor.initServer()
            }

            @Override
            public void afterSpec(SpecInfo specInfo) {
                processor.stopServer()
            }

        });
    }

    void visitFeatureAnnotation(Server annotation, FeatureInfo feature) {
        if (featureAnnotations.isEmpty()) {
            feature.getParent().addListener(new AbstractRunListener() {
                @Override
                public void beforeFeature(FeatureInfo featureInfo) {
                    ServerProcessor processor = featureAnnotations[featureInfo]
                    if (processor) {
                        processor.initServer()
                    }
                }

                @Override
                public void afterFeature(FeatureInfo featureInfo) {
                    ServerProcessor processor = featureAnnotations[featureInfo]
                    if (processor) {
                        processor.stopServer()
                    }
                }
            });
        }
        featureAnnotations[feature] = new ServerProcessor(annotation, feature.getClass())
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy