Home | History | Annotate | Download | only in setup
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.email.activity.setup;
     18 
     19 import android.content.Context;
     20 import android.test.InstrumentationTestCase;
     21 import android.test.suitebuilder.annotation.SmallTest;
     22 
     23 import com.android.email.activity.setup.AccountSettingsUtils.Provider;
     24 import com.android.email.tests.R;
     25 
     26 /**
     27  * This is a series of unit tests for the AccountSettingsUtils class.
     28  *
     29  * To run these tests,
     30  *  runtest -c com.android.email.activity.setup.AccountSettingsUtilsTests email
     31  */
     32 @SmallTest
     33 public class AccountSettingsUtilsTests extends InstrumentationTestCase {
     34 
     35     private Context mTestContext;
     36 
     37     @Override
     38     protected void setUp() throws Exception {
     39         super.setUp();
     40         mTestContext = getInstrumentation().getContext();
     41     }
     42 
     43     /**
     44      * Test server name inferences
     45      *
     46      * Incoming: Prepend "imap" or "pop3" to domain, unless "pop", "pop3",
     47      *          "imap", or "mail" are found.
     48      * Outgoing: Prepend "smtp" if "pop", "pop3", "imap" are found.
     49      *          Leave "mail" as-is.
     50      * TBD: Are there any useful defaults for exchange?
     51      */
     52     public void testGuessServerName() {
     53         assertEquals("foo.x.y.z", AccountSettingsUtils.inferServerName("x.y.z", "foo", null));
     54         assertEquals("Pop.y.z", AccountSettingsUtils.inferServerName("Pop.y.z", "foo", null));
     55         assertEquals("poP3.y.z", AccountSettingsUtils.inferServerName("poP3.y.z", "foo", null));
     56         assertEquals("iMAp.y.z", AccountSettingsUtils.inferServerName("iMAp.y.z", "foo", null));
     57         assertEquals("MaiL.y.z", AccountSettingsUtils.inferServerName("MaiL.y.z", "foo", null));
     58 
     59         assertEquals("bar.x.y.z", AccountSettingsUtils.inferServerName("x.y.z", null, "bar"));
     60         assertEquals("bar.y.z", AccountSettingsUtils.inferServerName("Pop.y.z", null, "bar"));
     61         assertEquals("bar.y.z", AccountSettingsUtils.inferServerName("poP3.y.z", null, "bar"));
     62         assertEquals("bar.y.z", AccountSettingsUtils.inferServerName("iMAp.y.z", null, "bar"));
     63         assertEquals("MaiL.y.z", AccountSettingsUtils.inferServerName("MaiL.y.z", null, "bar"));
     64     }
     65 
     66     public void testFindProviderForDomain() {
     67         Provider testProvider;
     68         // <provider id="gmail" label="Gmail" domain="gmail.com">
     69         //   <incoming uri="imap+ssl+://imap.gmail.com" username="$email" />
     70         //   <outgoing uri="smtp+ssl+://smtp.gmail.com" username="$email" />
     71         // </provider>
     72         testProvider = AccountSettingsUtils.findProviderForDomain(
     73                 mTestContext, "gmail.com", R.xml.test_providers);
     74         assertNotNull(testProvider);
     75         assertEquals("imap+ssl+://imap.gmail.com", testProvider.incomingUriTemplate);
     76         assertEquals("smtp+ssl+://smtp.gmail.com", testProvider.outgoingUriTemplate);
     77         assertEquals("gmail.com", testProvider.domain);
     78 
     79         // <provider id="rr-generic" label="RoadRunner" domain="*.rr.com">
     80         //   <incoming uri="pop3://pop-server.$domain" username="$email" />
     81         //   <outgoing uri="smtp://mobile-smtp.roadrunner.com" username="$email" />
     82         // </provider>
     83         testProvider = AccountSettingsUtils.findProviderForDomain(
     84                 mTestContext, "elmore.rr.com", R.xml.test_providers);
     85         assertNotNull(testProvider);
     86         assertEquals("pop3://pop-server.$domain", testProvider.incomingUriTemplate);
     87         assertEquals("smtp://mobile-smtp.roadrunner.com", testProvider.outgoingUriTemplate);
     88         assertEquals("elmore.rr.com", testProvider.domain);
     89 
     90         // Domain matches 2 providers; first one wins
     91         testProvider = AccountSettingsUtils.findProviderForDomain(
     92                 mTestContext, "leonard.rr.com", R.xml.test_providers);
     93         assertNotNull(testProvider);
     94         assertEquals("pop3://pop-server.firstonewins.com", testProvider.incomingUriTemplate);
     95 
     96         // Domains that don't exist
     97         testProvider = AccountSettingsUtils.findProviderForDomain(
     98                 mTestContext, "nonexist.com", R.xml.test_providers);
     99         assertNull(testProvider);
    100     }
    101 
    102     public void testMatchProvider() {
    103         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "foo.com"));
    104         assertFalse(AccountSettingsUtils.matchProvider("foo.co", "foo.com"));
    105         assertFalse(AccountSettingsUtils.matchProvider("", "foo.com"));
    106 
    107         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "fo?.com"));
    108         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "f??.com"));
    109         assertTrue(AccountSettingsUtils.matchProvider("fzz.com", "f??.com"));
    110         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "???.???"));
    111         assertFalse(AccountSettingsUtils.matchProvider("foo.com", "???.????"));
    112 
    113         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "*.com"));
    114         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "foo.*"));
    115         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "*.*"));
    116         assertFalse(AccountSettingsUtils.matchProvider("foo.com", "fox.*"));
    117         assertTrue(AccountSettingsUtils.matchProvider("foo.com", "*.???"));
    118         assertFalse(AccountSettingsUtils.matchProvider("foo.com", "*.?"));
    119 
    120         assertFalse(AccountSettingsUtils.matchProvider("foo.bar.com", "food.barge.comb"));
    121         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.bar.com"));
    122         assertFalse(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.bar.gag.com"));
    123         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.*.com"));
    124         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.*.*"));
    125         assertFalse(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.bar.*.*"));
    126         assertFalse(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.bar.*com"));
    127         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "*.bar.com"));
    128         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "*.*.com"));
    129         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "*.*.*"));
    130         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.bar.*"));
    131 
    132         assertTrue(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.???.*"));
    133         assertFalse(AccountSettingsUtils.matchProvider("foo.bar.com", "foo.*??.*"));
    134     }
    135 
    136     public void testExpandTemplates() {
    137         Provider testProvider;
    138         // <provider id="cox" label="Cox" domain="cox.net">
    139         //   <incoming uri="pop3+ssl+://pop.east.cox.net" username="$user" />
    140         //   <outgoing uri="smtp+ssl+://smtp.east.cox.net" username="$user" />
    141         // </provider>
    142         testProvider = new Provider();
    143         testProvider.domain = "cox.net";
    144         testProvider.incomingUriTemplate = "pop3+ssl+://pop.east.$domain";
    145         testProvider.outgoingUriTemplate = "smtp+ssl+://smtp.east.$domain";
    146         testProvider.incomingUsernameTemplate = "$user";
    147         testProvider.outgoingUsernameTemplate = "$user";
    148         testProvider.expandTemplates("replUser (at) cox.net");
    149         assertEquals("replUser", testProvider.incomingUsername);
    150         assertEquals("replUser", testProvider.outgoingUsername);
    151         assertEquals("pop3+ssl+://pop.east.cox.net", testProvider.incomingUri);
    152         assertEquals("smtp+ssl+://smtp.east.cox.net", testProvider.outgoingUri);
    153 
    154         // <provider id="earthlink" label="Earthlink" domain="earthlink.net">
    155         //   <incoming uri="pop3://pop.earthlink.net" username="$email" />
    156         //   <outgoing uri="smtp://smtpauth.earthlink.net:587" username="$email" />
    157         // </provider>
    158         testProvider = new Provider();
    159         testProvider.domain = "earthlink.net";
    160         testProvider.incomingUriTemplate = "pop3://pop.earthlink.net";
    161         testProvider.outgoingUriTemplate = "smtp://smtpauth.earthlink.net:587";
    162         testProvider.incomingUsernameTemplate = "$email";
    163         testProvider.outgoingUsernameTemplate = "$email";
    164         testProvider.expandTemplates("replUser (at) earthlink.net");
    165         assertEquals("replUser (at) earthlink.net", testProvider.incomingUsername);
    166         assertEquals("replUser (at) earthlink.net", testProvider.outgoingUsername);
    167         assertEquals("pop3://pop.earthlink.net", testProvider.incomingUri);
    168         assertEquals("smtp://smtpauth.earthlink.net:587", testProvider.outgoingUri);
    169 
    170         // <provider id="tuffmail" label="Tuffmail" domain="tuffmail.com">
    171         //   <incoming uri="imap+ssl+://mail.mxes.net" username="$user_$domain" />
    172         //   <outgoing uri="smtp+ssl+://smtp.mxes.net" username="$user_$domain" />
    173         // </provider>
    174         testProvider = new Provider();
    175         testProvider.domain = "tuffmail.com";
    176         testProvider.incomingUriTemplate = "imap+ssl+://mail.mxes.net";
    177         testProvider.outgoingUriTemplate = "smtp+ssl+://smtp.mxes.net";
    178         testProvider.incomingUsernameTemplate = "$user_$domain";
    179         testProvider.outgoingUsernameTemplate = "$user_$domain";
    180         testProvider.expandTemplates("replUser (at) tuffmail.com");
    181         assertEquals("replUser_tuffmail.com", testProvider.incomingUsername);
    182         assertEquals("replUser_tuffmail.com", testProvider.outgoingUsername);
    183         assertEquals("imap+ssl+://mail.mxes.net", testProvider.incomingUri);
    184         assertEquals("smtp+ssl+://smtp.mxes.net", testProvider.outgoingUri);
    185 
    186         // Everything hardcoded; not effective in the wild
    187         testProvider = new Provider();
    188         testProvider.domain = "yahoo.com";
    189         testProvider.incomingUriTemplate = "imap+ssl+://pop.yahoo.com";
    190         testProvider.outgoingUriTemplate = "smtp+ssl+://smtp.yahoo.com";
    191         testProvider.incomingUsernameTemplate = "joe_smith";
    192         testProvider.outgoingUsernameTemplate = "joe_smith";
    193         testProvider.expandTemplates("replUser (at) yahoo.com");
    194         assertEquals("joe_smith", testProvider.incomingUsername);
    195         assertEquals("joe_smith", testProvider.outgoingUsername);
    196         assertEquals("imap+ssl+://pop.yahoo.com", testProvider.incomingUri);
    197         assertEquals("smtp+ssl+://smtp.yahoo.com", testProvider.outgoingUri);
    198     }
    199 }
    200