From 3443b01b9aeda4be80bd004369d90f6ab609f6f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Fri, 27 Apr 2018 01:36:40 +0200 Subject: [PATCH] Fix grade regex (#91) --- .../wulkanowy/data/db/dao/entities/Grade.java | 27 ------------- .../ui/main/grades/GradeHeaderItem.java | 4 +- .../ui/main/grades/GradesDialogFragment.java | 3 +- .../ui/main/grades/GradesSubItem.java | 3 +- ...AverageCalculator.java => GradeUtils.java} | 39 ++++++++++++++++++- .../data/db/dao/entities/GradeTest.java | 15 ------- ...alculatorTest.java => GradeUtilsTest.java} | 25 ++++++++++-- 7 files changed, 64 insertions(+), 52 deletions(-) rename app/src/main/java/io/github/wulkanowy/utils/{AverageCalculator.java => GradeUtils.java} (63%) rename app/src/test/java/io/github/wulkanowy/utils/{AverageCalculatorTest.java => GradeUtilsTest.java} (51%) diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Grade.java b/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Grade.java index 5bc7e563..537b9e75 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Grade.java +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Grade.java @@ -10,8 +10,6 @@ import org.greenrobot.greendao.annotation.Property; import java.io.Serializable; -import io.github.wulkanowy.R; - @Entity( nameInDb = "Grades", active = true @@ -94,31 +92,6 @@ public class Grade implements Serializable { this.read = read; } - public int getValueColor() { - - String replacedString = value.replaceAll("[^0-9]", ""); - - if (!"".equals(replacedString)) { - switch (Integer.parseInt(replacedString)) { - case 6: - return R.color.six_grade; - case 5: - return R.color.five_grade; - case 4: - return R.color.four_grade; - case 3: - return R.color.three_grade; - case 2: - return R.color.two_grade; - case 1: - return R.color.one_grade; - default: - return R.color.default_grade; - } - } - return R.color.default_grade; - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradeHeaderItem.java b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradeHeaderItem.java index 55609fc3..6bb579b1 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradeHeaderItem.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradeHeaderItem.java @@ -18,7 +18,7 @@ import eu.davidea.viewholders.ExpandableViewHolder; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Subject; import io.github.wulkanowy.utils.AnimationUtils; -import io.github.wulkanowy.utils.AverageCalculator; +import io.github.wulkanowy.utils.GradeUtils; public class GradeHeaderItem extends AbstractExpandableHeaderItem { @@ -168,7 +168,7 @@ public class GradeHeaderItem } private String getGradesAverageString(Subject item) { - float average = AverageCalculator.calculate(item.getGradeList()); + float average = GradeUtils.calculate(item.getGradeList()); if (average < 0) { return resources.getString(R.string.info_no_average); diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesDialogFragment.java b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesDialogFragment.java index 0d9a699f..b8da5a96 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesDialogFragment.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesDialogFragment.java @@ -16,6 +16,7 @@ import butterknife.OnClick; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Grade; import io.github.wulkanowy.utils.CommonUtils; +import io.github.wulkanowy.utils.GradeUtils; public class GradesDialogFragment extends DialogFragment { @@ -76,7 +77,7 @@ public class GradesDialogFragment extends DialogFragment { subject.setText(grade.getSubject()); value.setText(grade.getValue()); - value.setBackgroundResource(grade.getValueColor()); + value.setBackgroundResource(GradeUtils.getValueColor(grade.getValue())); weight.setText(grade.getWeight()); date.setText(grade.getDate()); color.setText(CommonUtils.colorHexToColorName(grade.getColor())); diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesSubItem.java b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesSubItem.java index e8bd71ca..de9c54c6 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesSubItem.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesSubItem.java @@ -18,6 +18,7 @@ import eu.davidea.flexibleadapter.items.AbstractSectionableItem; import eu.davidea.viewholders.FlexibleViewHolder; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Grade; +import io.github.wulkanowy.utils.GradeUtils; public class GradesSubItem extends AbstractSectionableItem { @@ -108,7 +109,7 @@ public class GradesSubItem this.subjectAlertImage = subjectAlertImage; value.setText(item.getValue()); - value.setBackgroundResource(item.getValueColor()); + value.setBackgroundResource(GradeUtils.getValueColor(item.getValue())); date.setText(item.getDate()); description.setText(getDescriptionString()); alert.setVisibility(item.getRead() ? View.INVISIBLE : View.VISIBLE); diff --git a/app/src/main/java/io/github/wulkanowy/utils/AverageCalculator.java b/app/src/main/java/io/github/wulkanowy/utils/GradeUtils.java similarity index 63% rename from app/src/main/java/io/github/wulkanowy/utils/AverageCalculator.java rename to app/src/main/java/io/github/wulkanowy/utils/GradeUtils.java index cc33e65a..32bc5cd0 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/AverageCalculator.java +++ b/app/src/main/java/io/github/wulkanowy/utils/GradeUtils.java @@ -1,12 +1,18 @@ package io.github.wulkanowy.utils; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Grade; -public final class AverageCalculator { +public final class GradeUtils { - private AverageCalculator() { + private final static Pattern validGradePattern = Pattern.compile("^(\\++|-|--|=)?[0-6](\\++|-|--|=)?$"); + private final static Pattern simpleGradeValuePattern = Pattern.compile("([0-6])"); + + private GradeUtils() { throw new IllegalStateException("Utility class"); } @@ -58,4 +64,33 @@ public final class AverageCalculator { private static int getIntegerForWeightOfGrade(String weightOfGrade) { return Integer.valueOf(weightOfGrade.substring(0, weightOfGrade.length() - 3)); } + + public static int getValueColor(String value) { + Matcher m1 = validGradePattern.matcher(value); + if (!m1.find()) { + return R.color.default_grade; + } + + Matcher m2 = simpleGradeValuePattern.matcher(m1.group()); + if (!m2.find()) { + return R.color.default_grade; + } + + switch (Integer.parseInt(m2.group())) { + case 6: + return R.color.six_grade; + case 5: + return R.color.five_grade; + case 4: + return R.color.four_grade; + case 3: + return R.color.three_grade; + case 2: + return R.color.two_grade; + case 1: + return R.color.one_grade; + default: + return R.color.default_grade; + } + } } diff --git a/app/src/test/java/io/github/wulkanowy/data/db/dao/entities/GradeTest.java b/app/src/test/java/io/github/wulkanowy/data/db/dao/entities/GradeTest.java index 45a1d502..580ffdf5 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/dao/entities/GradeTest.java +++ b/app/src/test/java/io/github/wulkanowy/data/db/dao/entities/GradeTest.java @@ -7,21 +7,6 @@ import io.github.wulkanowy.R; public class GradeTest { - @Test - public void getValueColorTest() { - Assert.assertEquals(R.color.six_grade, new Grade().setValue("-6").getValueColor()); - Assert.assertEquals(R.color.five_grade, new Grade().setValue("--5").getValueColor()); - Assert.assertEquals(R.color.four_grade, new Grade().setValue("=4").getValueColor()); - Assert.assertEquals(R.color.three_grade, new Grade().setValue("3-").getValueColor()); - Assert.assertEquals(R.color.two_grade, new Grade().setValue("2--").getValueColor()); - Assert.assertEquals(R.color.two_grade, new Grade().setValue("2=").getValueColor()); - Assert.assertEquals(R.color.one_grade, new Grade().setValue("1+").getValueColor()); - Assert.assertEquals(R.color.one_grade, new Grade().setValue("+1").getValueColor()); - Assert.assertEquals(R.color.default_grade, new Grade().setValue("Np").getValueColor()); - Assert.assertEquals(R.color.default_grade, new Grade().setValue("7").getValueColor()); - Assert.assertEquals(R.color.default_grade, new Grade().setValue("").getValueColor()); - } - @Test public void equalsTest() { Assert.assertTrue(new Grade().setSubject("Religia").setValue("5") diff --git a/app/src/test/java/io/github/wulkanowy/utils/AverageCalculatorTest.java b/app/src/test/java/io/github/wulkanowy/utils/GradeUtilsTest.java similarity index 51% rename from app/src/test/java/io/github/wulkanowy/utils/AverageCalculatorTest.java rename to app/src/test/java/io/github/wulkanowy/utils/GradeUtilsTest.java index 581495d6..92a0b42c 100644 --- a/app/src/test/java/io/github/wulkanowy/utils/AverageCalculatorTest.java +++ b/app/src/test/java/io/github/wulkanowy/utils/GradeUtilsTest.java @@ -6,9 +6,10 @@ import org.junit.Test; import java.util.ArrayList; import java.util.List; +import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Grade; -public class AverageCalculatorTest { +public class GradeUtilsTest { @Test public void averageTest() { @@ -28,8 +29,8 @@ public class AverageCalculatorTest { gradeList1.add(new Grade().setValue("5+").setWeight("10,00")); gradeList1.add(new Grade().setValue("5").setWeight("10,00")); - Assert.assertEquals(4.8f, AverageCalculator.calculate(gradeList), 0.0f); - Assert.assertEquals(4.8f, AverageCalculator.calculate(gradeList1), 0.0f); + Assert.assertEquals(4.8f, GradeUtils.calculate(gradeList), 0.0f); + Assert.assertEquals(4.8f, GradeUtils.calculate(gradeList1), 0.0f); } @Test @@ -37,6 +38,22 @@ public class AverageCalculatorTest { List gradeList = new ArrayList<>(); gradeList.add(new Grade().setValue("np.").setWeight("1,00")); - Assert.assertEquals(-1f, AverageCalculator.calculate(gradeList), 0.0f); + Assert.assertEquals(-1f, GradeUtils.calculate(gradeList), 0.0f); + } + + @Test + public void getValueColor() { + Assert.assertEquals(R.color.six_grade, GradeUtils.getValueColor("-6")); + Assert.assertEquals(R.color.five_grade, GradeUtils.getValueColor("--5")); + Assert.assertEquals(R.color.four_grade, GradeUtils.getValueColor("=4")); + Assert.assertEquals(R.color.three_grade, GradeUtils.getValueColor("3-")); + Assert.assertEquals(R.color.two_grade, GradeUtils.getValueColor("2--")); + Assert.assertEquals(R.color.two_grade, GradeUtils.getValueColor("2=")); + Assert.assertEquals(R.color.one_grade, GradeUtils.getValueColor("1+")); + Assert.assertEquals(R.color.one_grade, GradeUtils.getValueColor("+1")); + Assert.assertEquals(R.color.default_grade, GradeUtils.getValueColor("6 (.XI)")); + Assert.assertEquals(R.color.default_grade, GradeUtils.getValueColor("Np")); + Assert.assertEquals(R.color.default_grade, GradeUtils.getValueColor("7")); + Assert.assertEquals(R.color.default_grade, GradeUtils.getValueColor("")); } }