summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/attribution/AttributionLayoutTest.java
blob: 0e45951c242dac63f5d129b41de009db4c91c4db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.mapbox.mapboxsdk.maps.attribution;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.PointF;
import android.support.test.rule.ActivityTestRule;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.mapbox.mapboxsdk.attribution.AttributionParser;
import com.mapbox.mapboxsdk.attribution.AttributionPlacement;
import com.mapbox.mapboxsdk.attribution.AttributionProvider;
import com.mapbox.mapboxsdk.testapp.activity.FeatureOverviewActivity;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import static junit.framework.Assert.assertEquals;

public class AttributionLayoutTest {

  @Rule
  public ActivityTestRule<FeatureOverviewActivity> rule = new ActivityTestRule<>(FeatureOverviewActivity.class);

  private static final String SATELLITE_ATTRIBUTION = "<a href=\"https://www.mapbox.com/about/maps/\" target=\"_blank\">&copy; Mapbox</a> <a href=\"http://www.openstreetmap.org/about/\" target=\"_blank\">&copy; OpenStreetMap</a> <a class=\"mapbox-improve-map\" href=\"https://www.mapbox.com/map-feedback/\" target=\"_blank\">Improve this map</a> <a href=\"https://www.digitalglobe.com/\" target=\"_blank\">&copy; DigitalGlobe</a>\n";
  private static final Bitmap LOGO = Bitmap.createBitmap(128, 56, Bitmap.Config.ARGB_8888);
  private static final Bitmap LOGO_SMALL = Bitmap.createBitmap(56, 56, Bitmap.Config.ARGB_8888);
  private static final String ATTRIBUTION = new AttributionParser.Options()
    .withAttributionData(SATELLITE_ATTRIBUTION)
    .withImproveMap(false)
    .withCopyrightSign(false)
    .build().getAttributionString();

  private Context context;
  private TextView textView;
  private float margin;

  @Before
  public void setUp() throws Exception {
    context = rule.getActivity();
    margin = context.getResources().getDisplayMetrics().density * 4;

    textView = new TextView(context);
    textView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT,
      ViewGroup.LayoutParams.WRAP_CONTENT)
    );
    textView.setSingleLine(true);
    textView.setTextSize(8);
    textView.setText(ATTRIBUTION);
  }

  @Test
  public void testLogoLayout() throws Exception {
    Bitmap snapshot = Bitmap.createBitmap(650, 600, Bitmap.Config.ARGB_8888);
    int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(snapshot.getWidth(), View.MeasureSpec.AT_MOST);
    int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    textView.measure(widthMeasureSpec, heightMeasureSpec);

    AttributionProvider attributionProvider = new AttributionProvider(snapshot, LOGO, LOGO_SMALL, textView, margin);

    PointF expectedPoint = new PointF(snapshot.getWidth() - textView.getMeasuredWidth() - margin, snapshot.getHeight() - textView.getMeasuredHeight() - margin);
    AttributionPlacement expected = new AttributionPlacement(LOGO, expectedPoint);
    AttributionPlacement actual = attributionProvider.calculateAttributionPlacement();
    assertEquals("Calculated placement should match: ", expected, actual);
  }

  @Test
  public void testSmallLogoLayout() {
    Bitmap snapshot = Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_8888);
    int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(snapshot.getWidth(), View.MeasureSpec.AT_MOST);
    int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    textView.measure(widthMeasureSpec, heightMeasureSpec);

    AttributionProvider attributionProvider = new AttributionProvider(snapshot, LOGO, LOGO_SMALL, textView, margin);

    PointF expectedPoint = new PointF(snapshot.getWidth() - textView.getMeasuredWidth() - margin, snapshot.getHeight() - textView.getMeasuredHeight() - margin);
    AttributionPlacement expected = new AttributionPlacement(LOGO_SMALL, expectedPoint);
    AttributionPlacement actual = attributionProvider.calculateAttributionPlacement();
    assertEquals("Calculated placement should match: ", expected, actual);
  }

  @Test
  public void testNoLogoLayout() {
    Bitmap snapshot = Bitmap.createBitmap(415, 415, Bitmap.Config.ARGB_8888);
    int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    textView.measure(widthMeasureSpec, heightMeasureSpec);

    AttributionProvider attributionProvider = new AttributionProvider(snapshot, LOGO, LOGO_SMALL, textView, margin);

    PointF expectedPoint = new PointF(snapshot.getWidth() - textView.getMeasuredWidth() - margin, snapshot.getHeight() - textView.getMeasuredHeight() - margin);
    AttributionPlacement expected = new AttributionPlacement(null, expectedPoint);
    AttributionPlacement actual = attributionProvider.calculateAttributionPlacement();
    assertEquals("Calculated placement should match: ", expected, actual);
  }

  @Test
  public void testNoAttributionLayout() {
    Bitmap snapshot = Bitmap.createBitmap(25, 25, Bitmap.Config.ARGB_8888);
    int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(snapshot.getWidth(), View.MeasureSpec.AT_MOST);
    int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    textView.measure(widthMeasureSpec, heightMeasureSpec);

    AttributionProvider attributionProvider = new AttributionProvider(snapshot, LOGO, LOGO_SMALL, textView, margin);

    AttributionPlacement expected = new AttributionPlacement(null, null);
    AttributionPlacement actual = attributionProvider.calculateAttributionPlacement();
    assertEquals("Calculated placement should match: ", expected, actual);
  }
}