/* * 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 org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class TestStringDatum { private StringDatum emptyStringDatum; private StringDatum trueStringDatum1; private StringDatum trueStringDatum2; private StringDatum falseStringDatum1; private StringDatum falseStringDatum2; private StringDatum intStringDatum; private StringDatum longStringDatum; private StringDatum stringDatum1; private StringDatum floatStringDatum; private StringDatum stringDatum2; private StringDatum stringDatum3; private StringDatum zeroDatum; private StringDatum negativeZeroDatum; private StringDatum multipleDigitsZeroDatum; private StringDatum floatingZeroDatum; @BeforeMethod(alwaysRun = true) public void setUp() throws Exception { emptyStringDatum = new StringDatum(""); trueStringDatum1 = new StringDatum("1"); trueStringDatum2 = new StringDatum("true"); falseStringDatum1 = new StringDatum("false"); falseStringDatum2 = new StringDatum("False"); intStringDatum = new StringDatum("100000"); longStringDatum = new StringDatum("10000000000"); stringDatum1 = new StringDatum("a string"); stringDatum2 = new StringDatum("a string"); stringDatum3 = new StringDatum("b string"); floatStringDatum = new StringDatum("1.1"); zeroDatum = new StringDatum("0"); negativeZeroDatum = new StringDatum("-0"); multipleDigitsZeroDatum = new StringDatum("0000"); floatingZeroDatum = new StringDatum("0.0"); } @Test(groups = "fast") public void testSanity() throws Exception { Assert.assertEquals(emptyStringDatum.asBoolean(), false); Assert.assertEquals(trueStringDatum1.asBoolean(), true); Assert.assertEquals(trueStringDatum2.asBoolean(), true); Assert.assertEquals(falseStringDatum1.asBoolean(), false); Assert.assertEquals(falseStringDatum2.asBoolean(), false); Assert.assertEquals(intStringDatum.asInteger(), 100000); Assert.assertEquals(longStringDatum.asLong(), 10000000000L); Assert.assertEquals(stringDatum1.asBoolean(), true); Assert.assertEquals(Float.compare(floatStringDatum.asFloat(), 1.1f), 0); // all forms of 0 are false, integer, floating point, artificial negatives as well Assert.assertFalse(zeroDatum.asBoolean()); Assert.assertFalse(negativeZeroDatum.asBoolean()); Assert.assertFalse(multipleDigitsZeroDatum.asBoolean()); Assert.assertFalse(floatingZeroDatum.asBoolean()); } @Test(groups = "fast") public void testCompare() throws Exception { Assert.assertEquals(stringDatum1.compareTo(stringDatum3), -1); Assert.assertEquals(stringDatum1.compareTo(stringDatum1), 0); Assert.assertEquals(stringDatum1.compareTo(stringDatum2), 0); Assert.assertEquals(stringDatum3.compareTo(stringDatum1), 1); } @Test(groups = "fast") public void testEquals() throws Exception { Assert.assertEquals(stringDatum1, stringDatum1); Assert.assertEquals(stringDatum1, stringDatum2); } @Test(groups = "fast") public void testError() throws Exception { try { stringDatum1.asByte(); Assert.fail(); } catch (NumberFormatException e) { // expected } try { stringDatum1.asShort(); Assert.fail(); } catch (NumberFormatException e) { // expected } try { stringDatum1.asInteger(); Assert.fail(); } catch (NumberFormatException e) { // expected } try { stringDatum1.asLong(); Assert.fail(); } catch (NumberFormatException e) { // expected } try { stringDatum1.asFloat(); Assert.fail(); } catch (NumberFormatException e) { // expected } try { stringDatum1.asDouble(); Assert.fail(); } catch (NumberFormatException e) { // expected } } }