chromium/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareUrlTest.java

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.share;

import android.app.Activity;
import android.content.Intent;

import androidx.test.filters.SmallTest;

import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import org.chromium.base.task.PostTask;
import org.chromium.base.task.TaskTraits;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
import org.chromium.ui.base.WindowAndroid;

import java.lang.ref.WeakReference;

/** Tests sharing URLs in reader mode (DOM distiller) */
// TODO(crbug.com/40256418): Remove this test when share no longer depends on DOM distiller.
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class ShareUrlTest {
    private static final String HTTP_URL = "http://www.google.com/";
    private static final String HTTPS_URL = "https://www.google.com/";

    @BeforeClass
    public static void setupBeforeCLass() {
        NativeLibraryTestUtils.loadNativeLibraryNoBrowserProcess();
    }

    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
    @Mock WindowAndroid mWindow;
    @Mock Activity mActivity;

    @Before
    public void setup() {
        Mockito.doReturn(new WeakReference<Activity>(mActivity)).when(mWindow).getActivity();
    }

    private void assertCorrectUrl(final String originalUrl, final String sharedUrl) {
        PostTask.runOrPostTask(
                TaskTraits.UI_DEFAULT,
                () -> {
                    ShareParams params =
                            new ShareParams.Builder(mWindow, "", sharedUrl).setText("").build();
                    Intent intent = ShareHelper.getShareIntent(params);
                    Assert.assertTrue(intent.hasExtra(Intent.EXTRA_TEXT));
                    String url = intent.getStringExtra(Intent.EXTRA_TEXT);
                    Assert.assertEquals(originalUrl, url);
                });
    }

    @Test
    @SmallTest
    public void testNormalUrl() {
        assertCorrectUrl(HTTP_URL, HTTP_URL);
        assertCorrectUrl(HTTPS_URL, HTTPS_URL);
    }

    @Test
    @SmallTest
    public void testDistilledUrl() {
        final String DomDistillerScheme = "chrome-distiller";
        String distilledHttpUrl =
                DomDistillerUrlUtils.getDistillerViewUrlFromUrl(
                        DomDistillerScheme, HTTP_URL, "Title");
        String distilledHttpsUrl =
                DomDistillerUrlUtils.getDistillerViewUrlFromUrl(
                        DomDistillerScheme, HTTPS_URL, "Title");

        assertCorrectUrl(HTTP_URL, distilledHttpUrl);
        assertCorrectUrl(HTTPS_URL, distilledHttpsUrl);
    }
}