From 96c6a97ad054d6744cc780717a121c5e6ddf1e2f Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 30 Mar 2016 19:46:37 -0400 Subject: [PATCH] Add tests for HabitScoreView --- .../assets/views/HabitScoreView/render.png | Bin 0 -> 11198 bytes .../views/HabitScoreView/renderDataOffset.png | Bin 0 -> 5500 bytes .../HabitScoreView/renderDifferentSize.png | Bin 0 -> 15376 bytes .../views/HabitScoreView/renderMonthly.png | Bin 0 -> 7767 bytes .../views/HabitScoreView/renderYearly.png | Bin 0 -> 4874 bytes .../unit/views/HabitScoreViewTest.java | 96 ++++++++++++++++++ .../isoron/uhabits/views/HabitScoreView.java | 6 ++ 7 files changed, 102 insertions(+) create mode 100644 app/src/androidTest/assets/views/HabitScoreView/render.png create mode 100644 app/src/androidTest/assets/views/HabitScoreView/renderDataOffset.png create mode 100644 app/src/androidTest/assets/views/HabitScoreView/renderDifferentSize.png create mode 100644 app/src/androidTest/assets/views/HabitScoreView/renderMonthly.png create mode 100644 app/src/androidTest/assets/views/HabitScoreView/renderYearly.png create mode 100644 app/src/androidTest/java/org/isoron/uhabits/unit/views/HabitScoreViewTest.java diff --git a/app/src/androidTest/assets/views/HabitScoreView/render.png b/app/src/androidTest/assets/views/HabitScoreView/render.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c98549cb6b6c5a010b11ccc77e18ecff188aa9 GIT binary patch literal 11198 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 F{2yN%WRm~@ literal 0 HcmV?d00001 diff --git a/app/src/androidTest/assets/views/HabitScoreView/renderDataOffset.png b/app/src/androidTest/assets/views/HabitScoreView/renderDataOffset.png new file mode 100644 index 0000000000000000000000000000000000000000..c84c230a1ae21453c64f8bb645c22e27c1fb9416 GIT binary patch literal 5500 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 literal 0 HcmV?d00001 diff --git a/app/src/androidTest/assets/views/HabitScoreView/renderMonthly.png b/app/src/androidTest/assets/views/HabitScoreView/renderMonthly.png new file mode 100644 index 0000000000000000000000000000000000000000..83c31bcfe3ba0f0f339ddb14328f2cc1e46e59cc GIT binary patch literal 7767 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 J<=S?C|1W`tPkI0V literal 0 HcmV?d00001 diff --git a/app/src/androidTest/assets/views/HabitScoreView/renderYearly.png b/app/src/androidTest/assets/views/HabitScoreView/renderYearly.png new file mode 100644 index 0000000000000000000000000000000000000000..1e45b47d1f4fc6b09141460d05ad6844c3d951fe GIT binary patch literal 4874 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 Nf|yvIFE(<%^Dl?}YoP!D literal 0 HcmV?d00001 diff --git a/app/src/androidTest/java/org/isoron/uhabits/unit/views/HabitScoreViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/unit/views/HabitScoreViewTest.java new file mode 100644 index 000000000..cde81ab26 --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/unit/views/HabitScoreViewTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.unit.views; + +import android.support.test.runner.AndroidJUnit4; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; + +import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.unit.HabitFixtures; +import org.isoron.uhabits.views.HabitScoreView; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class HabitScoreViewTest extends ViewTest +{ + private Habit habit; + private HabitScoreView view; + + @Before + public void setup() + { + super.setup(); + + HabitFixtures.purgeHabits(); + habit = HabitFixtures.createLongHabit(); + + view = new HabitScoreView(targetContext); + view.setHabit(habit); + view.setBucketSize(7); + measureView(dpToPixels(300), dpToPixels(100), view); + } + + @Test + public void render() throws Throwable + { + Log.d("HabitScoreViewTest", String.format("height=%d", dpToPixels(100))); + assertRenders(view, "HabitScoreView/render.png"); + } + + @Test + public void render_withDifferentSize() throws Throwable + { + measureView(dpToPixels(200), dpToPixels(200), view); + assertRenders(view, "HabitScoreView/renderDifferentSize.png"); + } + + @Test + public void render_withDataOffset() throws Throwable + { + view.onScroll(null, null, -dpToPixels(150), 0); + view.invalidate(); + + assertRenders(view, "HabitScoreView/renderDataOffset.png"); + } + + @Test + public void render_withMonthlyBucket() throws Throwable + { + view.setBucketSize(30); + view.refreshData(); + view.invalidate(); + + assertRenders(view, "HabitScoreView/renderMonthly.png"); + } + + @Test + public void render_withYearlyBucket() throws Throwable + { + view.setBucketSize(365); + view.refreshData(); + view.invalidate(); + + assertRenders(view, "HabitScoreView/renderYearly.png"); + } +} diff --git a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java index 2128f4e46..02cd33947 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java @@ -76,6 +76,12 @@ public class HabitScoreView extends ScrollableDataView implements HabitDataView private int bucketSize = 7; private int footerHeight; + public HabitScoreView(Context context) + { + super(context); + init(); + } + public HabitScoreView(Context context, AttributeSet attrs) { super(context, attrs);