Package org.auraframework.impl.adapter

Source Code of org.auraframework.impl.adapter.BrowserValueProviderTest

/*
* 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.adapter;

import org.auraframework.Aura;
import org.auraframework.def.ComponentDef;
import org.auraframework.def.DefDescriptor;
import org.auraframework.expression.PropertyReference;
import org.auraframework.impl.AuraImplTestCase;
import org.auraframework.impl.expression.PropertyReferenceImpl;
import org.auraframework.system.AuraContext;
import org.auraframework.system.Client;
import org.auraframework.test.client.UserAgent;
import org.auraframework.throwable.quickfix.InvalidExpressionException;

public class BrowserValueProviderTest extends AuraImplTestCase {

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

    private interface BrowserProperty {
        final PropertyReference isTablet = new PropertyReferenceImpl(
                BrowserValueProvider.IS_TABLET, null);
        final PropertyReference isPhone = new PropertyReferenceImpl(
                BrowserValueProvider.IS_PHONE, null);
        final PropertyReference isAndroid = new PropertyReferenceImpl(
                BrowserValueProvider.IS_ANDROID, null);
        final PropertyReference formFactor = new PropertyReferenceImpl(
                BrowserValueProvider.FORM_FACTOR, null);
        final PropertyReference isIPad = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IPAD, null);
        final PropertyReference isIPhone = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IPHONE, null);
        final PropertyReference isIOS = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IOS, null);
        final PropertyReference isWindowsPhone = new PropertyReferenceImpl(
                BrowserValueProvider.IS_WINDOWS_PHONE, null);
    }

    private interface BrowserType {
        final PropertyReference isWebKit = new PropertyReferenceImpl(
                BrowserValueProvider.IS_WEBKIT, null);
        final PropertyReference isFirefox = new PropertyReferenceImpl(
                BrowserValueProvider.IS_FIREFOX, null);
        final PropertyReference isIE6 = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IE6, null);
        final PropertyReference isIE7 = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IE7, null);
        final PropertyReference isIE8 = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IE8, null);
        final PropertyReference isIE9 = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IE9, null);
        final PropertyReference isIE10 = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IE10, null);
        final PropertyReference isIE11 = new PropertyReferenceImpl(
                BrowserValueProvider.IS_IE11, null);
    }

    public void testValidate() throws Exception {
        BrowserValueProvider bvp = new BrowserValueProvider();
        bvp.validate(BrowserProperty.isTablet);
        bvp.validate(BrowserProperty.isPhone);
        bvp.validate(BrowserProperty.isAndroid);
        bvp.validate(BrowserProperty.formFactor);
        bvp.validate(BrowserProperty.isIPad);
        bvp.validate(BrowserProperty.isIPhone);
        bvp.validate(BrowserProperty.isIOS);
        bvp.validate(BrowserProperty.isWindowsPhone);

        PropertyReference property = new PropertyReferenceImpl("hah", null);
        try {
            bvp.validate(property);
            fail("Expected InvalidExpressionException for " + property);
        } catch (InvalidExpressionException e) {
            assertEquals("No property on $Browser for key: " + property,
                    e.getMessage());
        }

        try {
            bvp.validate(null);
            fail("Expected NullPointerException for null PropertyReference");
        } catch (NullPointerException expected) {
        }
    }

    // semi-integration test checks that value provider is created and validated
    // on component
    public void testInvalidPropertyInMarkup() throws Exception {
        try {
            DefDescriptor<ComponentDef> desc = addSourceAutoCleanup(
                    ComponentDef.class,
                    "<aura:component>{!$Browser.badProperty}</aura:component>");

            Aura.getInstanceService().getInstance(desc, null);
            fail("Expected an InvalidExpressionException");
        } catch (InvalidExpressionException e) {
            assertEquals("No property on $Browser for key: badProperty",
                    e.getMessage());
        }
    }

    private void assertBrowserProperty(BrowserValueProvider bvp, PropertyReference property, Object expected,
            String userAgent) throws Exception {
        assertEquals("Unexpected value for " + property.toString() + " for UserAgent <" + userAgent + ">", expected,
                bvp.getValue(property));
    }

    private void assertBrowserProperties(UserAgent userAgent, boolean isTablet,
            boolean isPhone, boolean isAndroid, String formFactor,
            boolean isIPad, boolean isIPhone, boolean isIOS, boolean isWindowsPhone) throws Exception {
        AuraContext context = Aura.getContextService().getCurrentContext();
        String userAgentString = userAgent == null ? null : userAgent.getUserAgentString();
        context.setClient(new Client(userAgentString));
        BrowserValueProvider bvp = new BrowserValueProvider();
        assertBrowserProperty(bvp, BrowserProperty.isTablet, isTablet, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.isPhone, isPhone, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.isAndroid, isAndroid, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.formFactor, formFactor, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.isIPad, isIPad, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.isIPhone, isIPhone, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.isIOS, isIOS, userAgentString);
        assertBrowserProperty(bvp, BrowserProperty.isWindowsPhone, isWindowsPhone, userAgentString);
    }

    /**
     * Verify user agent strings return the correct browser properties (form factor, OS, etc.).
     */
    public void testGetValueBrowserProperties() throws Exception {
        assertBrowserProperties(null, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.EMPTY, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.GOOGLE_CHROME, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.IE6, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.IE7, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.IE8, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.IE9, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.IE10, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.IE11, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.FIREFOX, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.SAFARI5_MAC, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.OPERA12, false, false, false, "DESKTOP", false, false, false, false);
        assertBrowserProperties(UserAgent.OPERA12_MOBILE, false, true, true, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.IPHONE4, false, true, false, "PHONE", false, true, true, false);
        assertBrowserProperties(UserAgent.IPOD, false, true, false, "PHONE", false, true, true, false);
        assertBrowserProperties(UserAgent.IPAD, true, false, false, "TABLET", true, false, true, false);
        assertBrowserProperties(UserAgent.IPAD_7, true, false, false, "TABLET", true, false, true, false);
        assertBrowserProperties(UserAgent.IPAD_WEBVIEW, true, false, false, "TABLET", true, false, true, false);
        assertBrowserProperties(UserAgent.ANDROID1_6, false, true, true, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.ANDROID2_3, false, true, true, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.ANDROID4_2, false, true, true, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.NEXUS_10, true, false, true, "TABLET", false, false, false, false);
        assertBrowserProperties(UserAgent.KINDLE_FIRE, true, false, false, "TABLET", false, false, false, false);
        assertBrowserProperties(UserAgent.PLAYBOOK, true, false, false, "TABLET", false, false, false, false);
        assertBrowserProperties(UserAgent.NOKIA_N95, false, true, false, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.NOKIA_920, false, true, false, "PHONE", false, false, false, true);
        assertBrowserProperties(UserAgent.LUMIA_928, false, true, false, "PHONE", false, false, false, true);
        assertBrowserProperties(UserAgent.IE10_WINDOWS_PHONE_8, false, true, false, "PHONE", false, false, false, true);
        assertBrowserProperties(UserAgent.IE10_WINDOWS_RT_8, true, false, false, "TABLET", false, false, false, false);
        assertBrowserProperties(UserAgent.IE11_WINDOWS_PHONE_8_1, false, true, false, "PHONE", false, false, false,
                true);
        assertBrowserProperties(UserAgent.IE11_WINDOWS_RT_8_1, true, false, false, "TABLET", false, false, false, false);
        assertBrowserProperties(UserAgent.IE11_WINDOWS_PHONE_8_1, false, true, false, "PHONE", false, false, false,
                true);
        assertBrowserProperties(UserAgent.BLACKBERRY_10, false, true, false, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.BLACKBERRY_7, false, true, false, "PHONE", false, false, false, false);
        assertBrowserProperties(UserAgent.GOOD_IPHONE, false, true, false, "PHONE", false, true, true, false);
        assertBrowserProperties(UserAgent.GOOD_ANDROID, false, true, true, "PHONE", false, false, false, false);
    }

    public void testGetValueUndefinedProperty() throws Exception {
        BrowserValueProvider bvp = new BrowserValueProvider();
        assertEquals(null,
                bvp.getValue(new PropertyReferenceImpl("isBlackberry", null))); // undefined property
    }

    public void testGetValueBrowserTypes() throws Exception {
        assertBrowserTypes(UserAgent.EMPTY, false, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.GOOGLE_CHROME, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.IE6, false, false, true, false, false, false, false, false);
        assertBrowserTypes(UserAgent.IE7, false, false, false, true, false, false, false, false);
        assertBrowserTypes(UserAgent.IE8, false, false, false, false, true, false, false, false);
        assertBrowserTypes(UserAgent.IE9, false, false, false, false, false, true, false, false);
        assertBrowserTypes(UserAgent.IE10, false, false, false, false, false, false, true, false);
        assertBrowserTypes(UserAgent.IE11, false, false, false, false, false, false, false, true);
        assertBrowserTypes(UserAgent.IE11_WINDOWS_PHONE_8_1_SDK, false, false, false, false, false, false, false,
                true);
        assertBrowserTypes(UserAgent.IE11_NET_FRAMEWORK, false, false, false, false, false, false, false, true);
        assertBrowserTypes(UserAgent.IE11_WINDOWS_PHONE_8_1, false, false, false, false, false, false, false, true);
        assertBrowserTypes(UserAgent.IE11_WINDOWS_RT_8_1, false, false, false, false, false, false, false, true);
        assertBrowserTypes(UserAgent.LUMIA_928, false, false, false, false, false, false, false, true);
        assertBrowserTypes(UserAgent.NOKIA_920, false, false, false, false, false, false, true, false);
        assertBrowserTypes(UserAgent.FIREFOX, false, true, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.NETSCAPE, false, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.SAFARI5_MAC, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.SAFARI5_WINDOWS, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.SAFARI6, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.IPAD, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.IPAD_7, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.IPAD_WEBVIEW, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.NEXUS_10, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.OPERA12, false, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.OPERA12_MOBILE, false, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.OPERA_MINI, false, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.KINDLE_FIRE, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.ANDROID4_2, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.BLACKBERRY_7, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.BLACKBERRY_10, true, false, false, false, false, false, false, false);
        assertBrowserTypes(UserAgent.GOOD_IPHONE, true, false, false, false, false, false, false, false);
        // Good Technology for Android is not reported as WebKit, is that correct?
        assertBrowserTypes(UserAgent.GOOD_ANDROID, false, false, false, false, false, false, false, false);
    }

    private void assertBrowserType(BrowserValueProvider bvp, PropertyReference property, Object expected,
            String userAgent) throws Exception {
        assertEquals("Unexpected value for " + property.toString() + " for UserAgent <" + userAgent + ">", expected,
                bvp.getValue(property));
    }

    private void assertBrowserTypes(UserAgent userAgent, boolean isWebKit, boolean isFirefox, boolean isIE6,
            boolean isIE7, boolean isIE8, boolean isIE9, boolean isIE10, boolean isIE11) throws Exception {
        AuraContext context = Aura.getContextService().getCurrentContext();
        String userAgentString = userAgent == null ? null : userAgent.getUserAgentString();
        context.setClient(new Client(userAgentString));
        BrowserValueProvider bvp = new BrowserValueProvider();
        assertBrowserType(bvp, BrowserType.isWebKit, isWebKit, userAgentString);
        assertBrowserType(bvp, BrowserType.isFirefox, isFirefox, userAgentString);
        assertBrowserType(bvp, BrowserType.isIE6, isIE6, userAgentString);
        assertBrowserType(bvp, BrowserType.isIE7, isIE7, userAgentString);
        assertBrowserType(bvp, BrowserType.isIE8, isIE8, userAgentString);
        assertBrowserType(bvp, BrowserType.isIE9, isIE9, userAgentString);
        assertBrowserType(bvp, BrowserType.isIE10, isIE10, userAgentString);
        assertBrowserType(bvp, BrowserType.isIE11, isIE11, userAgentString);
    }

}
TOP

Related Classes of org.auraframework.impl.adapter.BrowserValueProviderTest

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.