diff options
4 files changed, 88 insertions, 199 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoader.java b/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoader.java index 7ed357c42390..393006940740 100644 --- a/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoader.java +++ b/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoader.java @@ -16,14 +16,17 @@ package com.android.settingslib.license; +import static com.android.settingslib.license.LicenseHtmlLoaderCompat.generateHtmlFile; +import static com.android.settingslib.license.LicenseHtmlLoaderCompat.getCachedHtmlFile; +import static com.android.settingslib.license.LicenseHtmlLoaderCompat.getVaildXmlFiles; +import static com.android.settingslib.license.LicenseHtmlLoaderCompat.isCachedHtmlFileOutdated; + import android.content.Context; -import androidx.annotation.VisibleForTesting; import android.util.Log; import com.android.settingslib.utils.AsyncLoader; import java.io.File; -import java.util.ArrayList; import java.util.List; /** @@ -32,14 +35,6 @@ import java.util.List; public class LicenseHtmlLoader extends AsyncLoader<File> { private static final String TAG = "LicenseHtmlLoader"; - private static final String[] DEFAULT_LICENSE_XML_PATHS = { - "/system/etc/NOTICE.xml.gz", - "/vendor/etc/NOTICE.xml.gz", - "/odm/etc/NOTICE.xml.gz", - "/oem/etc/NOTICE.xml.gz", - "/product/etc/NOTICE.xml.gz"}; - private static final String NOTICE_HTML_FILE_NAME = "NOTICE.html"; - private Context mContext; public LicenseHtmlLoader(Context context) { @@ -63,7 +58,7 @@ public class LicenseHtmlLoader extends AsyncLoader<File> { return null; } - File cachedHtmlFile = getCachedHtmlFile(); + File cachedHtmlFile = getCachedHtmlFile(mContext); if (!isCachedHtmlFileOutdated(xmlFiles, cachedHtmlFile) || generateHtmlFile(xmlFiles, cachedHtmlFile)) { return cachedHtmlFile; @@ -72,40 +67,4 @@ public class LicenseHtmlLoader extends AsyncLoader<File> { return null; } - @VisibleForTesting - List<File> getVaildXmlFiles() { - final List<File> xmlFiles = new ArrayList(); - for (final String xmlPath : DEFAULT_LICENSE_XML_PATHS) { - File file = new File(xmlPath); - if (file.exists() && file.length() != 0) { - xmlFiles.add(file); - } - } - return xmlFiles; - } - - @VisibleForTesting - File getCachedHtmlFile() { - return new File(mContext.getCacheDir(), NOTICE_HTML_FILE_NAME); - } - - @VisibleForTesting - boolean isCachedHtmlFileOutdated(List<File> xmlFiles, File cachedHtmlFile) { - boolean outdated = true; - if (cachedHtmlFile.exists() && cachedHtmlFile.length() != 0) { - outdated = false; - for (File file : xmlFiles) { - if (cachedHtmlFile.lastModified() < file.lastModified()) { - outdated = true; - break; - } - } - } - return outdated; - } - - @VisibleForTesting - boolean generateHtmlFile(List<File> xmlFiles, File htmlFile) { - return LicenseHtmlGeneratorFromXml.generateHtml(xmlFiles, htmlFile); - } } diff --git a/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoaderCompat.java b/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoaderCompat.java index d7c14ad66baa..d3b19031d0dc 100644 --- a/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoaderCompat.java +++ b/packages/SettingsLib/src/com/android/settingslib/license/LicenseHtmlLoaderCompat.java @@ -25,22 +25,21 @@ import java.io.File; import java.util.ArrayList; import java.util.List; -import androidx.annotation.VisibleForTesting; - /** * LicenseHtmlLoader is a loader which loads a license html file from default license xml files. */ public class LicenseHtmlLoaderCompat extends AsyncLoaderCompat<File> { private static final String TAG = "LicenseHtmlLoaderCompat"; - private static final String[] DEFAULT_LICENSE_XML_PATHS = { + static final String[] DEFAULT_LICENSE_XML_PATHS = { "/system/etc/NOTICE.xml.gz", "/vendor/etc/NOTICE.xml.gz", "/odm/etc/NOTICE.xml.gz", - "/oem/etc/NOTICE.xml.gz"}; - private static final String NOTICE_HTML_FILE_NAME = "NOTICE.html"; + "/oem/etc/NOTICE.xml.gz", + "/product/etc/NOTICE.xml.gz"}; + static final String NOTICE_HTML_FILE_NAME = "NOTICE.html"; - private Context mContext; + private final Context mContext; public LicenseHtmlLoaderCompat(Context context) { super(context); @@ -63,7 +62,7 @@ public class LicenseHtmlLoaderCompat extends AsyncLoaderCompat<File> { return null; } - File cachedHtmlFile = getCachedHtmlFile(); + File cachedHtmlFile = getCachedHtmlFile(mContext); if (!isCachedHtmlFileOutdated(xmlFiles, cachedHtmlFile) || generateHtmlFile(xmlFiles, cachedHtmlFile)) { return cachedHtmlFile; @@ -72,8 +71,7 @@ public class LicenseHtmlLoaderCompat extends AsyncLoaderCompat<File> { return null; } - @VisibleForTesting - List<File> getVaildXmlFiles() { + static List<File> getVaildXmlFiles() { final List<File> xmlFiles = new ArrayList(); for (final String xmlPath : DEFAULT_LICENSE_XML_PATHS) { File file = new File(xmlPath); @@ -84,13 +82,11 @@ public class LicenseHtmlLoaderCompat extends AsyncLoaderCompat<File> { return xmlFiles; } - @VisibleForTesting - File getCachedHtmlFile() { - return new File(mContext.getCacheDir(), NOTICE_HTML_FILE_NAME); + static File getCachedHtmlFile(Context context) { + return new File(context.getCacheDir(), NOTICE_HTML_FILE_NAME); } - @VisibleForTesting - boolean isCachedHtmlFileOutdated(List<File> xmlFiles, File cachedHtmlFile) { + static boolean isCachedHtmlFileOutdated(List<File> xmlFiles, File cachedHtmlFile) { boolean outdated = true; if (cachedHtmlFile.exists() && cachedHtmlFile.length() != 0) { outdated = false; @@ -104,8 +100,7 @@ public class LicenseHtmlLoaderCompat extends AsyncLoaderCompat<File> { return outdated; } - @VisibleForTesting - boolean generateHtmlFile(List<File> xmlFiles, File htmlFile) { + static boolean generateHtmlFile(List<File> xmlFiles, File htmlFile) { return LicenseHtmlGeneratorFromXml.generateHtml(xmlFiles, htmlFile); } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderCompatTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderCompatTest.java index f981f365ec2b..12a4e699fb76 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderCompatTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderCompatTest.java @@ -17,44 +17,43 @@ package com.android.settingslib.license; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; import android.content.Context; import com.android.settingslib.SettingsLibRobolectricTestRunner; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; +import org.robolectric.annotation.Resetter; import java.io.File; import java.util.ArrayList; +import java.util.List; @RunWith(SettingsLibRobolectricTestRunner.class) +@Config(shadows = LicenseHtmlLoaderCompatTest.ShadowLicenseHtmlLoaderCompat.class) public class LicenseHtmlLoaderCompatTest { + @Mock private Context mContext; - - LicenseHtmlLoaderCompat newLicenseHtmlLoader(ArrayList<File> xmlFiles, - File cachedHtmlFile, boolean isCachedHtmlFileOutdated, - boolean generateHtmlFileSucceeded) { - LicenseHtmlLoaderCompat loader = spy(new LicenseHtmlLoaderCompat(mContext)); - doReturn(xmlFiles).when(loader).getVaildXmlFiles(); - doReturn(cachedHtmlFile).when(loader).getCachedHtmlFile(); - doReturn(isCachedHtmlFileOutdated).when(loader).isCachedHtmlFileOutdated(any(), any()); - doReturn(generateHtmlFileSucceeded).when(loader).generateHtmlFile(any(), any()); - return loader; - } + private LicenseHtmlLoaderCompat mLoader; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mLoader = new LicenseHtmlLoaderCompat(mContext); + } + + @After + public void tearDown() { + ShadowLicenseHtmlLoaderCompat.reset(); } @Test @@ -63,10 +62,9 @@ public class LicenseHtmlLoaderCompatTest { xmlFiles.add(new File("test.xml")); File cachedHtmlFile = new File("test.html"); - LicenseHtmlLoaderCompat loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, true, true); + setupFakeData(xmlFiles, cachedHtmlFile, true, true); - assertThat(loader.loadInBackground()).isEqualTo(cachedHtmlFile); - verify(loader).generateHtmlFile(any(), any()); + assertThat(mLoader.loadInBackground()).isEqualTo(cachedHtmlFile); } @Test @@ -74,10 +72,9 @@ public class LicenseHtmlLoaderCompatTest { ArrayList<File> xmlFiles = new ArrayList(); File cachedHtmlFile = new File("test.html"); - LicenseHtmlLoaderCompat loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, true, true); + setupFakeData(xmlFiles, cachedHtmlFile, true, true); - assertThat(loader.loadInBackground()).isNull(); - verify(loader, never()).generateHtmlFile(any(), any()); + assertThat(mLoader.loadInBackground()).isNull(); } @Test @@ -86,11 +83,9 @@ public class LicenseHtmlLoaderCompatTest { xmlFiles.add(new File("test.xml")); File cachedHtmlFile = new File("test.html"); - LicenseHtmlLoaderCompat loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, false, - true); + setupFakeData(xmlFiles, cachedHtmlFile, false, true); - assertThat(loader.loadInBackground()).isEqualTo(cachedHtmlFile); - verify(loader, never()).generateHtmlFile(any(), any()); + assertThat(mLoader.loadInBackground()).isEqualTo(cachedHtmlFile); } @Test @@ -99,10 +94,56 @@ public class LicenseHtmlLoaderCompatTest { xmlFiles.add(new File("test.xml")); File cachedHtmlFile = new File("test.html"); - LicenseHtmlLoaderCompat loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, true, - false); + setupFakeData(xmlFiles, cachedHtmlFile, true, false); + + assertThat(mLoader.loadInBackground()).isNull(); + } + + void setupFakeData(ArrayList<File> xmlFiles, + File cachedHtmlFile, boolean isCachedHtmlFileOutdated, + boolean generateHtmlFileSucceeded) { + + ShadowLicenseHtmlLoaderCompat.sValidXmlFiles = xmlFiles; + ShadowLicenseHtmlLoaderCompat.sCachedHtmlFile = cachedHtmlFile; + ShadowLicenseHtmlLoaderCompat.sIsCachedHtmlFileOutdated = isCachedHtmlFileOutdated; + ShadowLicenseHtmlLoaderCompat.sGenerateHtmlFileSucceeded = generateHtmlFileSucceeded; + } - assertThat(loader.loadInBackground()).isNull(); - verify(loader).generateHtmlFile(any(), any()); + @Implements(LicenseHtmlLoaderCompat.class) + public static class ShadowLicenseHtmlLoaderCompat { + + + public static List<File> sValidXmlFiles; + public static File sCachedHtmlFile; + public static boolean sIsCachedHtmlFileOutdated; + public static boolean sGenerateHtmlFileSucceeded; + + @Resetter + public static void reset() { + sValidXmlFiles = null; + sCachedHtmlFile = null; + sIsCachedHtmlFileOutdated = false; + sGenerateHtmlFileSucceeded = false; + } + + @Implementation + static List<File> getVaildXmlFiles() { + return sValidXmlFiles; + } + + @Implementation + static File getCachedHtmlFile(Context context) { + return sCachedHtmlFile; + } + + @Implementation + static boolean isCachedHtmlFileOutdated(List<File> xmlFiles, File cachedHtmlFile) { + return sIsCachedHtmlFileOutdated; + } + + @Implementation + static boolean generateHtmlFile(List<File> xmlFiles, File htmlFile) { + return sGenerateHtmlFileSucceeded; + } } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java deleted file mode 100644 index 5095f508997e..000000000000 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2017 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.settingslib.license; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -import android.content.Context; - -import com.android.settingslib.SettingsLibRobolectricTestRunner; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import java.io.File; -import java.util.ArrayList; - -@RunWith(SettingsLibRobolectricTestRunner.class) -public class LicenseHtmlLoaderTest { - @Mock - private Context mContext; - - LicenseHtmlLoader newLicenseHtmlLoader(ArrayList<File> xmlFiles, - File cachedHtmlFile, boolean isCachedHtmlFileOutdated, - boolean generateHtmlFileSucceeded) { - LicenseHtmlLoader loader = spy(new LicenseHtmlLoader(mContext)); - doReturn(xmlFiles).when(loader).getVaildXmlFiles(); - doReturn(cachedHtmlFile).when(loader).getCachedHtmlFile(); - doReturn(isCachedHtmlFileOutdated).when(loader).isCachedHtmlFileOutdated(any(), any()); - doReturn(generateHtmlFileSucceeded).when(loader).generateHtmlFile(any(), any()); - return loader; - } - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testLoadInBackground() { - ArrayList<File> xmlFiles = new ArrayList(); - xmlFiles.add(new File("test.xml")); - File cachedHtmlFile = new File("test.html"); - - LicenseHtmlLoader loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, true, true); - - assertThat(loader.loadInBackground()).isEqualTo(cachedHtmlFile); - verify(loader).generateHtmlFile(any(), any()); - } - - @Test - public void testLoadInBackgroundWithNoVaildXmlFiles() { - ArrayList<File> xmlFiles = new ArrayList(); - File cachedHtmlFile = new File("test.html"); - - LicenseHtmlLoader loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, true, true); - - assertThat(loader.loadInBackground()).isNull(); - verify(loader, never()).generateHtmlFile(any(), any()); - } - - @Test - public void testLoadInBackgroundWithNonOutdatedCachedHtmlFile() { - ArrayList<File> xmlFiles = new ArrayList(); - xmlFiles.add(new File("test.xml")); - File cachedHtmlFile = new File("test.html"); - - LicenseHtmlLoader loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, false, true); - - assertThat(loader.loadInBackground()).isEqualTo(cachedHtmlFile); - verify(loader, never()).generateHtmlFile(any(), any()); - } - - @Test - public void testLoadInBackgroundWithGenerateHtmlFileFailed() { - ArrayList<File> xmlFiles = new ArrayList(); - xmlFiles.add(new File("test.xml")); - File cachedHtmlFile = new File("test.html"); - - LicenseHtmlLoader loader = newLicenseHtmlLoader(xmlFiles, cachedHtmlFile, true, false); - - assertThat(loader.loadInBackground()).isNull(); - verify(loader).generateHtmlFile(any(), any()); - } -} |