/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * 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 com.android.email.activity;

import com.android.emailcommon.utility.IntentUtilities;

import android.content.Intent;
import android.net.Uri;
import android.test.AndroidTestCase;

public class IntentUtilitiesTests extends AndroidTestCase {
    public void testSimple() {
        final Uri.Builder b = IntentUtilities.createActivityIntentUrlBuilder("/abc");
        IntentUtilities.setAccountId(b, 10);
        IntentUtilities.setMailboxId(b, 20);
        IntentUtilities.setMessageId(b, 30);
        IntentUtilities.setAccountUuid(b, "*uuid*");

        final Uri u = b.build();
        assertEquals("content", u.getScheme());
        assertEquals("ui.email.android.com", u.getAuthority());
        assertEquals("/abc", u.getPath());

        final Intent i = new Intent(Intent.ACTION_MAIN, u);
        assertEquals(10, IntentUtilities.getAccountIdFromIntent(i));
        assertEquals(20, IntentUtilities.getMailboxIdFromIntent(i));
        assertEquals(30, IntentUtilities.getMessageIdFromIntent(i));
        assertEquals("*uuid*", IntentUtilities.getAccountUuidFromIntent(i));
    }

    public void testGetIdFromIntent() {
        Intent i;

        // No URL in intent
        i = new Intent(getContext(), getClass());
        assertEquals(-1, IntentUtilities.getAccountIdFromIntent(i));
        assertEquals(-1, IntentUtilities.getMailboxIdFromIntent(i));
        assertEquals(-1, IntentUtilities.getMessageIdFromIntent(i));

        // No param
        checkGetIdFromIntent("content://s/", -1);

        // No value
        checkGetIdFromIntent("content://s/?ID=", -1);

        // Value not integer
        checkGetIdFromIntent("content://s/?ID=x", -1);

        // Negative value
        checkGetIdFromIntent("content://s/?ID=-100", -100);

        // Normal value
        checkGetIdFromIntent("content://s/?ID=200", 200);

        // With all 3 params
        i = new Intent(Intent.ACTION_VIEW, Uri.parse(
                "content://s/?ACCOUNT_ID=5&MAILBOX_ID=6&MESSAGE_ID=7"));
        assertEquals(5, IntentUtilities.getAccountIdFromIntent(i));
        assertEquals(6, IntentUtilities.getMailboxIdFromIntent(i));
        assertEquals(7, IntentUtilities.getMessageIdFromIntent(i));
    }

    public void checkGetIdFromIntent(String uri, long expected) {
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(uri.replace("ID", "ACCOUNT_ID")));
        assertEquals(expected, IntentUtilities.getAccountIdFromIntent(i));

        i = new Intent(Intent.ACTION_VIEW, Uri.parse(uri.replace("ID", "MAILBOX_ID")));
        assertEquals(expected, IntentUtilities.getMailboxIdFromIntent(i));

        i = new Intent(Intent.ACTION_VIEW, Uri.parse(uri.replace("ID", "MESSAGE_ID")));
        assertEquals(expected, IntentUtilities.getMessageIdFromIntent(i));
    }

    public void testGetAccountUuidFromIntent() {
        Intent i;

        // No URL in intent
        i = new Intent(getContext(), getClass());
        assertEquals(null, IntentUtilities.getAccountUuidFromIntent(i));

        // No param
        i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://s/"));
        assertEquals(null, IntentUtilities.getAccountUuidFromIntent(i));

        // No value
        i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://s/?ACCOUNT_UUID="));
        assertEquals(null, IntentUtilities.getAccountUuidFromIntent(i));

        // With valid UUID
        i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://s/?ACCOUNT_UUID=xyz"));
        assertEquals("xyz", IntentUtilities.getAccountUuidFromIntent(i));
    }
}
