Tests for Resources.getFont

Test: run cts -m CtsContentTestCases -t
android.content.res.cts.ResourcesTest
run cts -m CtsWidgetTestCases -t
android.widget.cts.TextViewTest

Change-Id: Ib18cf6bf588113e8cd3279b195366f31d3a0fe14
diff --git a/tests/tests/content/res/font/samplefont.ttf b/tests/tests/content/res/font/samplefont.ttf
new file mode 100644
index 0000000..49f1c62
--- /dev/null
+++ b/tests/tests/content/res/font/samplefont.ttf
Binary files differ
diff --git a/tests/tests/content/res/font/samplexmlfont.xml b/tests/tests/content/res/font/samplexmlfont.xml
new file mode 100644
index 0000000..2905c13
--- /dev/null
+++ b/tests/tests/content/res/font/samplexmlfont.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:android="http://schemas.android.com/apk/res/android">
+    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/samplefont" />
+</font-family>
\ No newline at end of file
diff --git a/tests/tests/content/src/android/content/res/cts/ResourcesTest.java b/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
index 18b1fd3..917f184 100644
--- a/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
@@ -31,6 +31,7 @@
 import android.content.res.Resources.NotFoundException;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
+import android.graphics.Typeface;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -706,4 +707,41 @@
 
         is.close();
     }
+
+    public void testGetFont_invalidResourceId() {
+        try {
+            mResources.getFont(-1);
+            fail("Font resource -1 should not be found.");
+        } catch (NotFoundException e) {
+            //expected
+        }
+    }
+
+    public void testGetFont_fontFile() {
+        Typeface font = mResources.getFont(R.font.samplefont);
+
+        assertNotNull(font);
+        assertNotSame(Typeface.DEFAULT, font);
+    }
+
+    public void testGetFont_xmlFile() {
+        Typeface font = mResources.getFont(R.font.samplexmlfont);
+
+        assertNotNull(font);
+        assertNotSame(Typeface.DEFAULT, font);
+    }
+
+    public void testGetFont_fontFileIsCached() {
+        Typeface font = mResources.getFont(R.font.samplefont);
+        Typeface font2 = mResources.getFont(R.font.samplefont);
+
+        assertEquals(font, font2);
+    }
+
+    public void testGetFont_xmlFileIsCached() {
+        Typeface font = mResources.getFont(R.font.samplexmlfont);
+        Typeface font2 = mResources.getFont(R.font.samplexmlfont);
+
+        assertEquals(font, font2);
+    }
 }
diff --git a/tests/tests/widget/res/font/samplefont.ttf b/tests/tests/widget/res/font/samplefont.ttf
new file mode 100644
index 0000000..49f1c62
--- /dev/null
+++ b/tests/tests/widget/res/font/samplefont.ttf
Binary files differ
diff --git a/tests/tests/widget/res/font/samplexmlfont.xml b/tests/tests/widget/res/font/samplexmlfont.xml
new file mode 100644
index 0000000..2905c13
--- /dev/null
+++ b/tests/tests/widget/res/font/samplexmlfont.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:android="http://schemas.android.com/apk/res/android">
+    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/samplefont" />
+</font-family>
\ No newline at end of file
diff --git a/tests/tests/widget/res/layout/textview_layout.xml b/tests/tests/widget/res/layout/textview_layout.xml
index 1af5557..33566df 100644
--- a/tests/tests/widget/res/layout/textview_layout.xml
+++ b/tests/tests/widget/res/layout/textview_layout.xml
@@ -287,6 +287,48 @@
                 android:autoSizeMaxTextSize="50dp"
                 android:autoSizeStepGranularity="1dp" />
 
+            <TextView
+                android:id="@+id/textview_fontresource_fontfamily"
+                android:text="@string/text_view_hello"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:fontFamily="@font/samplefont" />
+
+            <TextView
+                android:id="@+id/textview_fontxmlresource_fontfamily"
+                android:text="@string/text_view_hello"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:fontFamily="@font/samplexmlfont" />
+
+            <TextView
+                android:id="@+id/textview_fontresource_style"
+                android:text="@string/text_view_hello"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                style="@style/TextView_FontResource" />
+
+            <TextView
+                android:id="@+id/textview_fontxmlresource_style"
+                android:text="@string/text_view_hello"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                style="@style/TextView_FontXmlResource" />
+
+            <TextView
+                android:id="@+id/textview_fontresource_textAppearance"
+                android:text="@string/text_view_hello"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textAppearance="@style/TextView_FontResource" />
+
+            <TextView
+                android:id="@+id/textview_fontxmlresource_textAppearance"
+                android:text="@string/text_view_hello"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textAppearance="@style/TextView_FontXmlResource" />
+
         </LinearLayout>
 
 </ScrollView>
diff --git a/tests/tests/widget/res/values/styles.xml b/tests/tests/widget/res/values/styles.xml
index 7ba9711..a47f169 100644
--- a/tests/tests/widget/res/values/styles.xml
+++ b/tests/tests/widget/res/values/styles.xml
@@ -227,4 +227,13 @@
         <!-- Force swipe-to-dismiss to false. -->
         <item name="android:windowSwipeToDismiss">false</item>
     </style>
+
+    <style name="TextView_FontResource">
+        <item name="android:fontFamily">@font/samplefont</item>
+        <item name="android:textAppearance">@null</item>
+    </style>
+
+    <style name="TextView_FontXmlResource">
+        <item name="android:fontFamily">@font/samplexmlfont</item>
+    </style>
 </resources>
diff --git a/tests/tests/widget/src/android/widget/cts/TextViewTest.java b/tests/tests/widget/src/android/widget/cts/TextViewTest.java
index 46755c0..31ecbb0 100644
--- a/tests/tests/widget/src/android/widget/cts/TextViewTest.java
+++ b/tests/tests/widget/src/android/widget/cts/TextViewTest.java
@@ -6792,6 +6792,53 @@
         assertEquals(selection.getSelectionEndIndex(), mTextView.getSelectionEnd());
         // TODO: Test the floating toolbar content.
     }
+    @Test
+    public void testFontResources_setInXmlFamilyName() {
+        mTextView = findTextView(R.id.textview_fontresource_fontfamily);
+        Typeface expected = mActivity.getResources().getFont(R.font.samplefont);
+
+        assertEquals(expected, mTextView.getTypeface());
+    }
+
+    @Test
+    public void testFontResourcesXml_setInXmlFamilyName() {
+        mTextView = findTextView(R.id.textview_fontxmlresource_fontfamily);
+        Typeface expected = mActivity.getResources().getFont(R.font.samplexmlfont);
+
+        assertEquals(expected, mTextView.getTypeface());
+    }
+
+    @Test
+    public void testFontResources_setInXmlStyle() {
+        mTextView = findTextView(R.id.textview_fontresource_style);
+        Typeface expected = mActivity.getResources().getFont(R.font.samplefont);
+
+        assertEquals(expected, mTextView.getTypeface());
+    }
+
+    @Test
+    public void testFontResourcesXml_setInXmlStyle() {
+        mTextView = findTextView(R.id.textview_fontxmlresource_style);
+        Typeface expected = mActivity.getResources().getFont(R.font.samplexmlfont);
+
+        assertEquals(expected, mTextView.getTypeface());
+    }
+
+    @Test
+    public void testFontResources_setInXmlTextAppearance() {
+        mTextView = findTextView(R.id.textview_fontresource_textAppearance);
+        Typeface expected = mActivity.getResources().getFont(R.font.samplefont);
+
+        assertEquals(expected, mTextView.getTypeface());
+    }
+
+    @Test
+    public void testFontResourcesXml_setInXmlTextAppearance() {
+        mTextView = findTextView(R.id.textview_fontxmlresource_textAppearance);
+        Typeface expected = mActivity.getResources().getFont(R.font.samplexmlfont);
+
+        assertEquals(expected, mTextView.getTypeface());
+    }
 
     /**
      * Some TextView attributes require non-fixed width and/or layout height. This function removes