/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.util;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.junit.Assert;
import junit.framework.TestCase;
public class MapComparatorTest extends TestCase {
private String orderByKey = "orderby";
public void test_comparator_date() throws Exception {
test_comparator_date_0(true);
test_comparator_date_0(false);
}
public void test_comparator_String() throws Exception {
test_comparator_string_0(true);
test_comparator_string_0(false);
}
public void test_comparator_number() throws Exception {
test_comparator_number_0(true);
test_comparator_number_0(false);
}
public void test_comparator_array() throws Exception {
test_comparator_array_0(true);
test_comparator_array_0(false);
}
private void test_comparator_array_0(boolean desc) throws Exception {
String orderByKey = "orderby";
long now = System.currentTimeMillis();
MapComparator<String, Date[]> comparator = new MapComparator<String, Date[]>(orderByKey + "[0]", desc);
Map<String, Date[]> map1 = new HashMap<String, Date[]>();
Map<String, Date[]> map2 = new HashMap<String, Date[]>();
map1.put(orderByKey, new Date[] { new Date(now) });
map2.put(orderByKey, new Date[] { new Date(now - 1) });
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map2.put(orderByKey, new Date[] { new Date(now) });
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
map2.put(orderByKey, new Date[] { new Date(now + 1) });
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map2.put(orderByKey, null);
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map1.put(orderByKey, null);
map2.put(orderByKey, new Date[] { new Date(now) });
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map1.put(orderByKey, null);
map2.put(orderByKey, null);
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
}
private void test_comparator_date_0(boolean desc) throws Exception {
long now = System.currentTimeMillis();
MapComparator<String, Date> comparator = new MapComparator<String, Date>(orderByKey, desc);
Map<String, Date> map1 = new HashMap<String, Date>();
Map<String, Date> map2 = new HashMap<String, Date>();
map1.put(orderByKey, new Date(now));
map2.put(orderByKey, new Date(now - 1));
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map2.put(orderByKey, new Date(now));
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
map2.put(orderByKey, new Date(now + 1));
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map2.put(orderByKey, null);
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map1.put(orderByKey, null);
map2.put(orderByKey, new Date(now));
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map1.put(orderByKey, null);
map2.put(orderByKey, null);
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
}
private void test_comparator_string_0(boolean desc) throws Exception {
MapComparator<String, String> comparator = new MapComparator<String, String>(orderByKey, desc);
Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<String, String>();
map1.put(orderByKey, "opq");
map2.put(orderByKey, "xyz");
Assert.assertEquals(desc, comparator.compare(map1, map2) > 0);
map2.put(orderByKey, "opq");
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
map2.put(orderByKey, "abc");
Assert.assertEquals(desc, comparator.compare(map1, map2) < 0);
map2.put(orderByKey, null);
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map1.put(orderByKey, null);
map2.put(orderByKey, "opq");
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map1.put(orderByKey, null);
map2.put(orderByKey, null);
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
}
private void test_comparator_number_0(boolean desc) throws Exception {
MapComparator<String, Double> comparator = new MapComparator<String, Double>(orderByKey, desc);
double baseNumber = 100.123;
Map<String, Double> map1 = new HashMap<String, Double>();
Map<String, Double> map2 = new HashMap<String, Double>();
map1.put(orderByKey, baseNumber);
map2.put(orderByKey, baseNumber - 1);
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map2.put(orderByKey, baseNumber);
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
map2.put(orderByKey, baseNumber + 1);
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map2.put(orderByKey, null);
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
map1.put(orderByKey, null);
map2.put(orderByKey, baseNumber);
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
map1.put(orderByKey, null);
map2.put(orderByKey, null);
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
}
}