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

org.apache.sling.junit.RequestParser Maven / Gradle / Ivy

/*
 * 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.apache.sling.junit;


/** Parse information from a request, to define which
 *  tests to run and which renderer to select.
 *  
 *  We do not use the Sling API to to that, in order to 
 *  keep the junit core module reusable in other OSGi 
 *  environments.
 */
public class RequestParser implements TestSelector {
    private final String testNameSelector;
    private final String selectedMethodName;
    private final String extension;
    private static final String EMPTY_STRING = "";

    /** Parse subpath, which is in the form 
     *  TEST_SELECTOR/TEST_METHOD.EXTENSION
     *  or
     *  TEST_SELECTOR.EXTENSION
     */
    public RequestParser(String subpath) {
        
        if (subpath == null) {
            testNameSelector = EMPTY_STRING;
            selectedMethodName = EMPTY_STRING;
            extension = EMPTY_STRING;
        } else {
            if (subpath.startsWith("/")) {
                subpath = subpath.substring(1);
            }
            
            // Split at last dot to find extension
            String beforeExtension = null;
            {
                final int pos = subpath.lastIndexOf('.');
                if (pos >= 0) {
                    beforeExtension = subpath.substring(0, pos);
                    extension = subpath.substring(pos+1);
                } else {
                    beforeExtension = subpath;
                    extension = EMPTY_STRING;
                }
            }
            
            // And split at last / between test selector and test method name
            {
                final int pos = beforeExtension.lastIndexOf('/');
                if(pos >= 0) {
                    testNameSelector = beforeExtension.substring(0, pos);
                    selectedMethodName = beforeExtension.substring(pos+1);
                } else {
                    testNameSelector = beforeExtension;
                    selectedMethodName = EMPTY_STRING;
                }
            }
        }
    }

    public String toString() {
        return getClass().getSimpleName() 
                + ", testSelector [" + testNameSelector + "]"
                + ", methodName [" + selectedMethodName + "]"
                + ", extension [" + extension + "]"
                ;
    }

    public String getTestSelectorString() {
        return testNameSelector;
    }

    public String getExtension() {
        return extension;
    }
    
    public String getMethodName() {
        return selectedMethodName;
    }
    
    public boolean acceptTestName(String testName) {
        if(testNameSelector.length() == 0) {
            return true;
        } else {
            return testName.startsWith(testNameSelector);
        }
    }

    public String getSelectedTestMethodName() {
        return selectedMethodName;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy