⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testabstractmoduledescriptor.java

📁 模块化您的应用系统
💻 JAVA
字号:
/*
 * Created by IntelliJ IDEA.
 * User: Mike
 * Date: Jul 29, 2004
 * Time: 4:28:18 PM
 */
package com.opensymphony.tonic.descriptors;

import junit.framework.TestCase;
import com.opensymphony.tonic.ModuleDescriptor;
import com.opensymphony.tonic.PluginParseException;
import com.opensymphony.tonic.Plugin;
import com.opensymphony.tonic.util.ClassLoaderUtils;
import com.opensymphony.tonic.impl.StaticPlugin;
import com.opensymphony.tonic.mock.MockMineral;
import org.dom4j.DocumentHelper;
import org.dom4j.DocumentException;
import org.dom4j.Element;

public class TestAbstractModuleDescriptor extends TestCase
{
    public void testAssertModuleClassImplements() throws DocumentException, PluginParseException
    {
        ModuleDescriptor descriptor = new AbstractModuleDescriptor() {
            public void init(Plugin plugin, Element element) throws PluginParseException
            {
                super.init(plugin, element);
                assertModuleClassImplements(MockMineral.class);
            }

            public Object getModule()
            {
                return null;
            }
        };

        try
        {
            descriptor.init(new StaticPlugin(), DocumentHelper.parseText("<animal name=\"bear\" class=\"com.opensymphony.tonic.mock.MockBear\" />").getRootElement());
            fail("Should have blown up.");
        }
        catch (PluginParseException e)
        {
            assertEquals("Given module class: com.opensymphony.tonic.mock.MockBear does not implement com.opensymphony.tonic.mock.MockMineral", e.getMessage());
        }

        // now succeed
        descriptor.init(new StaticPlugin(), DocumentHelper.parseText("<animal name=\"bear\" class=\"com.opensymphony.tonic.mock.MockGold\" />").getRootElement());
    }

    public void testSingletonness() throws DocumentException, PluginParseException
    {
        ModuleDescriptor descriptor = makeSingletonDescriptor();

        // try a default descriptor with no singleton="" element. Should _be_ a singleton
        descriptor.init(new StaticPlugin(), DocumentHelper.parseText("<animal name=\"bear\" class=\"com.opensymphony.tonic.mock.MockBear\" />").getRootElement());
        Object module = descriptor.getModule();
        assertTrue(module == descriptor.getModule());

        // now try a default descriptor with singleton="true" element. Should still be a singleton
        descriptor = makeSingletonDescriptor();
        descriptor.init(new StaticPlugin(), DocumentHelper.parseText("<animal name=\"bear\" class=\"com.opensymphony.tonic.mock.MockBear\" singleton=\"true\" />").getRootElement());
        module = descriptor.getModule();
        assertTrue(module == descriptor.getModule());

        // now try reiniting as a non-singleton
        descriptor = makeSingletonDescriptor();
        descriptor.init(new StaticPlugin(), DocumentHelper.parseText("<animal name=\"bear\" class=\"com.opensymphony.tonic.mock.MockBear\" singleton=\"false\" />").getRootElement());
        module = descriptor.getModule();
        assertTrue(module != descriptor.getModule());
    }

    private ModuleDescriptor makeSingletonDescriptor()
    {
        ModuleDescriptor descriptor = new AbstractModuleDescriptor() {
            Object module;

            public void init(Plugin plugin, Element element) throws PluginParseException
            {
                super.init(plugin, element);
            }

            public Object getModule()
            {
                try
                {
                    if (!isSingleton())
                    {
                        return ClassLoaderUtils.loadClass(getModuleClass().getName(), TestAbstractModuleDescriptor.class).newInstance();
                    }
                    else
                    {
                        if (module == null)
                        {
                            module = ClassLoaderUtils.loadClass(getModuleClass().getName(), TestAbstractModuleDescriptor.class).newInstance();
                        }

                        return module;
                    }
                }
                catch (Exception e)
                {
                    throw new RuntimeException("What happened Dave?");
                }
            }
        };
        return descriptor;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -