/* * Copyright (C) 2012 Facebook, Inc. * * 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.facebook.data.types; import com.google.common.collect.ImmutableList; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.List; public class TestListDatum { private ListDatum list1; private ListDatum list2; private ListDatum list3; private ListDatum list4; @BeforeMethod(alwaysRun = true) public void setUp() throws Exception { List<Datum> datumList1 = new ImmutableList.Builder<Datum>() .add(new StringDatum("a")) .add(new StringDatum("b")) .add(new StringDatum("c")) .build(); list1 = new ListDatum(datumList1, ','); List<Datum> datumList2 = new ImmutableList.Builder<Datum>() .add(new StringDatum("a")) .add(new StringDatum("b")) .add(new StringDatum("d")) .build(); list2 = new ListDatum(datumList2, ','); List<Datum> datumList3 = new ImmutableList.Builder<Datum>() .add(new StringDatum("1")) .add(new StringDatum("2")) .add(new StringDatum("3")) .build(); list3 = new ListDatum(datumList3, ','); // identical to list1 List<Datum> datumList4 = new ImmutableList.Builder<Datum>() .add(new StringDatum("a")) .add(new StringDatum("b")) .add(new StringDatum("c")) .build(); list4 = new ListDatum(datumList4, ','); } @Test(groups = "fast") public void testCompare() throws Exception { // check equality Assert.assertEquals(list1.compareTo(list1), 0); Assert.assertEquals(list1.compareTo(list4), 0); Assert.assertEquals(list2.compareTo(list2), 0); Assert.assertEquals(list3.compareTo(list3), 0); // now check where difference is 1 Assert.assertEquals(list1.compareTo(list2), -1); Assert.assertEquals(list2.compareTo(list1), 1); // now arbitrary delta Assert.assertTrue(list1.compareTo(list3) > 0); Assert.assertTrue(list3.compareTo(list1) < 0); } @Test(groups = "fast") public void testEquality() throws Exception { Assert.assertEquals(list1, list1); Assert.assertEquals(list1, list4); Assert.assertEquals(list4, list1); Assert.assertEquals(list2, list2); Assert.assertEquals(list3, list3); } @Test(groups = "fast") public void testAsString() throws Exception { Assert.assertEquals(list1.asString(), "a,b,c"); } @Test(groups = "fast") public void testAsBytes() throws Exception { Assert.assertEquals(list1.asBytes(), "a,b,c".getBytes("UTF-8")); } @Test(groups = "fast") public void testAsJsonString() throws Exception { Assert.assertEquals( DatumUtils.buildJSON(list1).toString(), "[\"a\",\"b\",\"c\"]"); } @Test(groups = "fast") public void testNullDatum() throws Exception { ArrayList<Datum> datumList = new ArrayList<Datum>(); datumList.add(NullDatum.INSTANCE); datumList.add(NullDatum.INSTANCE); ListDatum nullList = new ListDatum(datumList); Assert.assertEquals(DatumUtils.buildJSON(nullList).toString(), "[null,null]"); } }