package fr.openwide.core.test.wicket.more.model;
import java.util.Date;
import java.util.Locale;
import org.apache.wicket.Localizer;
import org.apache.wicket.model.IModel;
import org.junit.Assert;
import org.junit.Test;
import fr.openwide.core.test.wicket.more.AbstractWicketMoreTestCase;
import fr.openwide.core.wicket.more.model.RangeModel;
import fr.openwide.core.wicket.more.rendering.Renderer;
import fr.openwide.core.wicket.more.util.DatePattern;
import fr.openwide.core.wicket.more.util.model.Models;
public class TestRangeRenderer extends AbstractWicketMoreTestCase {
private static final String LOWER_TAG = "${start}";
private static final String UPPER_TAG = "${end}";
private static final String LOWER_UNIT_TAG = "${startUnit}";
private static final String UPPER_UNIT_TAG = "${endUnit}";
private static final String KEY_DATES_BASE = "test.wicket.more.model.renderer.range.dates";
private static final String KEY_DATES_SOLO = KEY_DATES_BASE + ".solo";
private static final String KEY_DATES_BOTH = KEY_DATES_BASE + ".both";
private static final String KEY_DATES_FROM = KEY_DATES_BASE + ".from";
private static final String KEY_DATES_UPTO = KEY_DATES_BASE + ".upto";
private static final String KEY_MONEY_BASE = "test.wicket.more.model.renderer.range.money";
private static final String KEY_MONEY_SOLO = KEY_MONEY_BASE + ".solo";
private static final String KEY_MONEY_BOTH = KEY_MONEY_BASE + ".both";
private static final String KEY_MONEY_FROM = KEY_MONEY_BASE + ".from";
private static final String KEY_MONEY_UPTO = KEY_MONEY_BASE + ".upto";
private static final String KEY_COUNT_BASE = "test.wicket.more.model.renderer.count.money";
/**
* <p>JUnit non-regression tests on Range renderers.
* <p><b>Tests:</b><ul>
* <li>Whether the base of the resource key is correctly used
* <li>Whether the right resource key suffix is used, regarding the bounds of the given range
* <li>Whether the four tags which may be found within a string designated by a resource key are correctly replaced
* </ul>
*/
@Test
public void testRangeRenderer() {
testWithUnits();
testWithoutUnits();
}
private void testWithUnits() {
String expected;
IModel<Integer> lowerBoundModel;
IModel<Integer> upperBoundModel;
RangeModel<Integer> moneyRangeModel;
// Testing .solo suffix
lowerBoundModel = Models.transientModel(42);
upperBoundModel = null;
moneyRangeModel = RangeModel.singleton(lowerBoundModel);
expected = Localizer.get().getString(KEY_MONEY_SOLO, null)
.replace(LOWER_UNIT_TAG, UPPER_UNIT_TAG)
.replace(UPPER_UNIT_TAG, Renderer.count(KEY_COUNT_BASE).render(lowerBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_MONEY_BASE, Renderer.<Integer>count(KEY_COUNT_BASE)).asModel(moneyRangeModel).getObject()
);
// Testing .both suffix
lowerBoundModel = Models.transientModel(0);
upperBoundModel = Models.transientModel(1);
moneyRangeModel = RangeModel.closed(lowerBoundModel, upperBoundModel);
expected = Localizer.get().getString(KEY_MONEY_BOTH, null)
.replace(LOWER_UNIT_TAG, Renderer.count(KEY_COUNT_BASE).render(lowerBoundModel.getObject(), Locale.FRANCE))
.replace(UPPER_UNIT_TAG, Renderer.count(KEY_COUNT_BASE).render(upperBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_MONEY_BASE, Renderer.<Integer>count(KEY_COUNT_BASE)).asModel(moneyRangeModel).getObject()
);
// Testing .from suffix
lowerBoundModel = Models.transientModel(1);
upperBoundModel = null;
moneyRangeModel = RangeModel.atLeast(lowerBoundModel);
expected = Localizer.get().getString(KEY_MONEY_FROM, null)
.replace(LOWER_UNIT_TAG, Renderer.count(KEY_COUNT_BASE).render(lowerBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_MONEY_BASE, Renderer.<Integer>count(KEY_COUNT_BASE)).asModel(moneyRangeModel).getObject()
);
// Testing .upto suffix
lowerBoundModel = null;
upperBoundModel = Models.transientModel(90);
moneyRangeModel = RangeModel.atMost(upperBoundModel);
expected = Localizer.get().getString(KEY_MONEY_UPTO, null)
.replace(UPPER_UNIT_TAG, Renderer.count(KEY_COUNT_BASE).render(upperBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_MONEY_BASE, Renderer.<Integer>count(KEY_COUNT_BASE)).asModel(moneyRangeModel).getObject()
);
}
private void testWithoutUnits() {
String expected;
IModel<Date> lowerBoundModel;
IModel<Date> upperBoundModel;
RangeModel<Date> dateRangeModel;
/*
* Tests based upon the WicketMoreTestApplication.utf8.properties file.
*/
// Testing .solo suffix
lowerBoundModel = Models.transientModel(new Date(42L));
upperBoundModel = null;
dateRangeModel = RangeModel.singleton(lowerBoundModel);
expected = Localizer.get().getString(KEY_DATES_SOLO, null)
.replace(LOWER_TAG, UPPER_TAG)
.replace(UPPER_TAG, Renderer.fromDatePattern(DatePattern.SHORT_DATE).render(lowerBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_DATES_BASE, Renderer.fromDatePattern(DatePattern.SHORT_DATE)).asModel(dateRangeModel).getObject()
);
// Testing .both suffix
lowerBoundModel = Models.transientModel(new Date(10000000000000L));
upperBoundModel = Models.transientModel(new Date(90000000000000L));
dateRangeModel = RangeModel.closed(lowerBoundModel, upperBoundModel);
expected =
Localizer.get().getString(KEY_DATES_BOTH, null)
.replace(LOWER_TAG, Renderer.fromDatePattern(DatePattern.SHORT_DATE).render(lowerBoundModel.getObject(), Locale.FRANCE))
.replace(UPPER_TAG, Renderer.fromDatePattern(DatePattern.SHORT_DATE).render(upperBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_DATES_BASE, Renderer.fromDatePattern(DatePattern.SHORT_DATE)).asModel(dateRangeModel).getObject()
);
// Testing .from suffix
lowerBoundModel = Models.transientModel(new Date(80000000000000L));
upperBoundModel = null;
dateRangeModel = RangeModel.atLeast(lowerBoundModel);
expected = Localizer.get().getString(KEY_DATES_FROM, null)
.replace(LOWER_TAG, Renderer.fromDatePattern(DatePattern.SHORT_DATE).render(lowerBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_DATES_BASE, Renderer.fromDatePattern(DatePattern.SHORT_DATE)).asModel(dateRangeModel).getObject()
);
// Testing .upto suffix
lowerBoundModel = null;
upperBoundModel = Models.transientModel(new Date(20000000000000L));
dateRangeModel = RangeModel.atMost(upperBoundModel);
expected = Localizer.get().getString(KEY_DATES_UPTO, null)
.replace(UPPER_TAG, Renderer.fromDatePattern(DatePattern.SHORT_DATE).render(upperBoundModel.getObject(), Locale.FRANCE));
Assert.assertEquals(
expected,
Renderer.range(KEY_DATES_BASE, Renderer.fromDatePattern(DatePattern.SHORT_DATE)).asModel(dateRangeModel).getObject()
);
}
}