com.liferay.httpservice.internal.definition.WebXMLDefinitionLoaderTest.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.httpservice.internal.definition.WebXMLDefinitionLoaderTest.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.httpservice.internal.definition;

import com.liferay.httpservice.test.MockBundle;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.xml.DocumentException;
import com.liferay.portal.kernel.xml.SAXReaderUtil;
import com.liferay.portal.xml.SAXReaderImpl;

import java.net.URL;

import java.util.List;
import java.util.Map;

import javax.servlet.Servlet;
import javax.servlet.ServletContextListener;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.mockito.Mock;

import org.osgi.framework.Bundle;

import org.powermock.modules.junit4.PowerMockRunner;

/**
 * @author Miguel Pastor
 */
@RunWith(PowerMockRunner.class)
public class WebXMLDefinitionLoaderTest {

    @BeforeClass
    public static void setUpClass() {
        SAXReaderUtil saxReaderUtil = new SAXReaderUtil();

        saxReaderUtil.setSAXReader(SAXReaderImpl.getInstance());
    }

    public WebXMLDefinitionLoaderTest() throws DocumentException {
        _webXMLDefinitionLoader = new WebXMLDefinitionLoader();
    }

    @Test
    public void testLoadCustomDependencies() throws Exception {
        Bundle bundle = new EntryLoaderMockBundle();

        testLoadDependencies(bundle, _LISTENER_DEFAULT_CLASS_NAMES.length + 1, 1,
                _SERVLET_DEFAULT_CLASSE_NAMES.length + 1);
    }

    @Test
    public void testLoadDefaultDependencies() throws Exception {
        Bundle bundle = new CustomClassLoaderMockBundle();

        testLoadDependencies(bundle, _LISTENER_DEFAULT_CLASS_NAMES.length, 0, _SERVLET_DEFAULT_CLASSE_NAMES.length);
    }

    protected void testLoadDependencies(Bundle bundle, int numfOfListeners, int numOfFilters, int numfOfServlets)
            throws Exception {

        WebXMLDefinition webXMLDefinition = _webXMLDefinitionLoader.loadWebXML(bundle);

        List<ListenerDefinition> listenerDefinitions = webXMLDefinition.getListenerDefinitions();

        Assert.assertEquals(numfOfListeners, listenerDefinitions.size());

        for (ListenerDefinition listenerDefinition : listenerDefinitions) {
            Object listener = listenerDefinition.getListener();

            Assert.assertTrue(listener instanceof ServletContextListener);
        }

        Map<String, ServletDefinition> servletDefinitions = webXMLDefinition.getServletDefinitions();

        Assert.assertEquals(numfOfServlets, servletDefinitions.size());

        Map<String, FilterDefinition> filterDefinitions = webXMLDefinition.getFilterDefinitions();

        Assert.assertEquals(numOfFilters, filterDefinitions.size());
    }

    private static final String[] _LISTENER_DEFAULT_CLASS_NAMES = {
            "org.eclipse.jetty.servlet.listener.ELContextCleaner",
            "org.eclipse.jetty.servlet.listener.IntrospectorCleaner" };

    private static final String[] _SERVLET_DEFAULT_CLASSE_NAMES = {
            "com.liferay.httpservice.servlet.ResourceServlet", "org.apache.jasper.servlet.JspServlet" };

    @Mock
    private Servlet _servlet;

    @Mock
    private ServletContextListener _servletContextListener;

    private WebXMLDefinitionLoader _webXMLDefinitionLoader;

    private class CustomClassLoaderMockBundle extends MockBundle {

        @Override
        public Class<?> loadClass(String className) throws ClassNotFoundException {

            if (ArrayUtil.contains(_LISTENER_DEFAULT_CLASS_NAMES, className)) {
                return _servletContextListener.getClass();
            } else if (ArrayUtil.contains(_SERVLET_DEFAULT_CLASSE_NAMES, className)) {

                return _servlet.getClass();
            } else {
                return super.loadClass(className);
            }
        }

    }

    private class EntryLoaderMockBundle extends CustomClassLoaderMockBundle {

        @Override
        public URL getEntry(String path) {
            Class<?> clazz = getClass();

            ClassLoader classLoader = clazz.getClassLoader();

            return classLoader
                    .getResource("com/liferay/httpservice/internal/definition/dependencies/" + "custom-web.xml");
        }

    }

}