2 * Copyright (C) 2014 Google Inc.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.i18n.addressinput;
19 import com.android.i18n.addressinput.testing.TestActivity;
21 import android.app.Activity;
22 import android.app.ProgressDialog;
23 import android.content.Context;
24 import android.test.ActivityInstrumentationTestCase2;
25 import android.view.View;
26 import android.widget.ArrayAdapter;
27 import android.widget.EditText;
28 import android.widget.LinearLayout;
29 import android.widget.Spinner;
30 import android.widget.TextView;
32 import junit.framework.Assert;
35 * Test class for {@link AddressWidgetUiComponentProvider}.
37 public class AddressWidgetUiComponentProviderTest
38 extends ActivityInstrumentationTestCase2<TestActivity> {
39 private AddressWidget widget;
40 private AddressWidgetUiComponentProvider componentProvider;
41 private LinearLayout container;
42 private AddressData address;
43 private Context context;
44 private int customTextViewCounter;
45 private int customProgressDialogCounter;
47 public AddressWidgetUiComponentProviderTest() {
48 super(TestActivity.class);
52 protected void setUp() throws Exception {
54 AddressData.Builder builder = new AddressData.Builder()
56 .setLanguageCode("en")
57 .setAddressLine1("1098 Alta Ave")
59 address = builder.build();
60 context = getActivity();
61 container = new LinearLayout(context);
64 public void testCustomWidgets() {
65 customTextViewCounter = 0;
66 customProgressDialogCounter = 0;
67 componentProvider = new TestComponentProvider(context);
68 widget = new AddressWidget(context, container, new FormOptions.Builder().build(),
69 new SimpleClientCacheManager(), componentProvider);
70 widget.renderFormWithSavedAddress(address);
72 for (AddressField field : AddressField.values()) {
73 if (field.equals(AddressField.COUNTRY)) {
77 View view = widget.getViewForField(field);
78 if (view instanceof EditText) {
79 assertTrue("Field " + field + " does not use customized edit text widget.",
80 view instanceof CustomEditText);
81 } else if (view instanceof Spinner) {
82 assertTrue("Field " + field + " does not use customized spinner widget.",
83 view instanceof CustomSpinner);
84 assertTrue("Field " + field + " does not use customized ArrayAdapter.",
85 ((Spinner) view).getAdapter() instanceof CustomArrayAdapter);
89 assertTrue("Custom TextView label not used.", customTextViewCounter > 0);
90 assertTrue("Custom ProgressDialog not used.", customProgressDialogCounter > 0);
93 private void increaseTextViewCounter() {
94 customTextViewCounter++;
97 private void increaseProgressDialogCounter() {
98 customProgressDialogCounter++;
101 private class CustomEditText extends EditText {
102 CustomEditText(Context context) {
107 private class CustomSpinner extends Spinner {
108 CustomSpinner(Context context) {
113 private class CustomArrayAdapter<String> extends ArrayAdapter {
114 CustomArrayAdapter(Context context, int id) {
119 private class TestComponentProvider extends AddressWidgetUiComponentProvider {
120 TestComponentProvider(Context context) {
124 protected TextView createUiLabel(CharSequence label, AddressField.WidthType widthType) {
125 TextView result = new TextView(mContext);
126 result.setText(label);
127 AddressWidgetUiComponentProviderTest.this.increaseTextViewCounter();
131 protected EditText createUiTextField(AddressField.WidthType widthType) {
132 return new CustomEditText(mContext);
135 protected Spinner createUiPickerSpinner(AddressField.WidthType widthType) {
136 return new CustomSpinner(mContext);
139 protected ArrayAdapter<String> createUiPickerAdapter(AddressField.WidthType widthType) {
140 ArrayAdapter<String> result = new CustomArrayAdapter<String>(
141 context, android.R.layout.simple_spinner_item);
142 result.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
146 protected ProgressDialog getUiActivityIndicatorView() {
147 AddressWidgetUiComponentProviderTest.this.increaseProgressDialogCounter();
148 return super.getUiActivityIndicatorView();