Package org.auraframework.impl.renderer

Source Code of org.auraframework.impl.renderer.JavaRendererDefFactoryTest

/*
* Copyright (C) 2013 salesforce.com, inc.
*
* 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 org.auraframework.impl.renderer;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import org.auraframework.def.ComponentDef;
import org.auraframework.def.DefDescriptor;
import org.auraframework.def.Renderer;
import org.auraframework.def.RendererDef;
import org.auraframework.impl.AuraImplTestCase;
import org.auraframework.impl.java.renderer.JavaRendererDef;
import org.auraframework.impl.java.renderer.JavaRendererDefFactory;
import org.auraframework.impl.system.DefDescriptorImpl;
import org.auraframework.instance.BaseComponent;
import org.auraframework.throwable.quickfix.DefinitionNotFoundException;
import org.auraframework.throwable.quickfix.InvalidDefinitionException;

/**
* This class has automation for JavaRendererDefFactory. This factory fetches definitions of renderers defined in Java.
*
* @hierarchy Aura.Components.Renderer
* @priority high
* @userStory a07B0000000Doob
*/
public class JavaRendererDefFactoryTest extends AuraImplTestCase {
    JavaRendererDefFactory factory;

    public JavaRendererDefFactoryTest(String name) {
        super(name);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        factory = new JavaRendererDefFactory();
    }

    /**
     * Verify Generation of JavaRendererDef from JavaRendererDefFactory.
     */
    public void testDefGeneration() throws Exception {
        DefDescriptor<RendererDef> descriptor = DefDescriptorImpl.getInstance(
                "java://org.auraframework.impl.renderer.sampleJavaRenderers.TestSimpleRenderer", RendererDef.class);
        RendererDef def = factory.getDef(descriptor);
        assertTrue("JavaRendererDefFactory should always generate JavaRendererDefs", def instanceof JavaRendererDef);
    }

    /**
     * Verify that specifying a non existent Java class returns null.
     */
    public void testClassNotFound() throws Exception {
        DefDescriptor<RendererDef> descriptor = DefDescriptorImpl
                .getInstance("java://ClassNotFound", RendererDef.class);
        assertNull(factory.getDef(descriptor));

        DefDescriptor<ComponentDef> cmpDesc = addSourceAutoCleanup(ComponentDef.class,
                "<aura:component renderer='java://ClassNotFound'></aura:component>");
        try {
            cmpDesc.getDef();
            fail("Should not be able to retrieve component definition when specified renderer is invalid.");
        } catch (Exception e) {
            checkExceptionStart(e, DefinitionNotFoundException.class,
                    "No RENDERER named java://ClassNotFound found");
        }
    }

    /**
     * Verify that Renderer interface declares method with correct properties. Renderer interface will be implemented by
     * all Renderers.
     *
     * @throws Exception
     */
    public void testRendererInterfaceProperties() throws Exception {
        try {
            Method renderMethod = Renderer.class.getMethod("render", BaseComponent.class, Appendable.class);
            assertTrue("render method on Renderer interface should be declared public.",
                    Modifier.isPublic(renderMethod.getModifiers()));
        } catch (NoSuchMethodException e) {
            // The interface org.auraframework.def.Renderer should declare a render method to be overriden by
            // Java renderers.
            fail("Renderer interface does not declare a render method.");
        }
    }

    /**
     * Verify that specifying an absrtact java class as renderer throws an Exception.
     *
     * @throws Exception
     */
    public void testAbstractClassAsRenderer() throws Exception {
        // 1. Renderers which extend Renderer interface
        DefDescriptor<RendererDef> descriptor = DefDescriptorImpl.getInstance(
                "java://org.auraframework.impl.renderer.sampleJavaRenderers.TestAbstractRenderer", RendererDef.class);
        try {
            descriptor.getDef();
            fail("JavaRenderers that extend Renderer interface cannot be abstract.");
        } catch (Exception e) {
            checkExceptionFull(e, InvalidDefinitionException.class,
                    "Cannot instantiate org.auraframework.impl.renderer.sampleJavaRenderers.TestAbstractRenderer",
                    "org.auraframework.impl.renderer.sampleJavaRenderers.TestAbstractRenderer");
        }
    }

    /**
     * Verify that a JavaRenderer extending Renderer interface cannot hide its constructor.
     */
    public void testRendererWithPrivateConstructor() throws Exception {
        DefDescriptor<RendererDef> descriptor = DefDescriptorImpl.getInstance(
                "java://org.auraframework.impl.renderer.sampleJavaRenderers.TestPrivateConstructorInRendererExtension",
                RendererDef.class);
        try {
            descriptor.getDef();
            fail("JavaRenderers that implement Renderer interface cannot hide their constructor.");
        } catch (Exception e) {
            checkExceptionFull(
                    e,
                    InvalidDefinitionException.class,
                    "Constructor is inaccessible for org.auraframework.impl.renderer.sampleJavaRenderers.TestPrivateConstructorInRendererExtension",
                    "org.auraframework.impl.renderer.sampleJavaRenderers.TestPrivateConstructorInRendererExtension");
        }
    }

    /**
     * Verify that specifying a Java class not implementing Renderer interface throws runtime exception.
     */
    public void testClassDoesNotImplementRenderer() throws Exception {
        JavaRendererDef.Builder builder = new JavaRendererDef.Builder();
        builder.setDescriptor(DefDescriptorImpl.getInstance(
                "java://org.auraframework.impl.renderer.sampleJavaRenderers.TestSimpleRenderer", RendererDef.class));
        JavaRendererDef def = builder.build();

        try {
            def.validateDefinition();
            fail("JavaRendererDef cannot be created if interface not implemented.");
        } catch (Exception e) {
            checkExceptionFull(e, InvalidDefinitionException.class, "Renderer must implement the Renderer interface.");
        }
    }
}
TOP

Related Classes of org.auraframework.impl.renderer.JavaRendererDefFactoryTest

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.