/* The MIT License (MIT) * * Copyright (c) 2015 Reinventing Geospatial, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package com.rgi.geopackage.features; import org.junit.Test; import java.math.BigInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import static org.junit.Assert.assertEquals; /** * @author Luke Lambert */ public class ColumnDefaultTest { private static final Pattern ESCAPE_SQL_STRING = Pattern.compile("'", Pattern.LITERAL); /** * Test ColumnDefault value for correct default expression values */ @Test public void expressionDefault() { final String expression = "1"; final ColumnDefault columnDefault = ColumnDefault.expression(expression); assertEquals("Incorrect expression default value", String.format("(%s)", expression), columnDefault.sqlLiteral()); } /** * Test ColumnDefault value for correct default int value */ @Test public void intDefault() { final int value = 1; final ColumnDefault columnDefault = ColumnDefault.from(value); assertEquals("Incorrect int default value", Integer.toString(value), columnDefault.sqlLiteral()); } /** * Test ColumnDefault value for default double value */ @Test public void doubleDefault() { final double value = 1.0; final ColumnDefault columnDefault = ColumnDefault.from(value); assertEquals("Incorrect double default value", Double.toString(value), columnDefault.sqlLiteral()); } /** * Test ColumnDefault value for default string value */ @Test public void stringDefault() { final String value = "fo''o"; final ColumnDefault columnDefault = ColumnDefault.from(value); assertEquals("Incorrect string default value", String.format("'%s'", ESCAPE_SQL_STRING.matcher(value).replaceAll(Matcher.quoteReplacement("''"))), columnDefault.sqlLiteral()); } /** * Test ColumnDefault value for default blob value */ @Test public void blobDefault() { final byte[] value = {(byte)0, (byte)0}; final ColumnDefault columnDefault = ColumnDefault.from(value); // This solution was found here: // https://stackoverflow.com/a/943963/16434 final BigInteger bigInt = new BigInteger(1, value); assertEquals("Incorrect blob default value", String.format("X'%0" + (value.length << 1) + "X'", bigInt), columnDefault.sqlLiteral()); } /** * Test ColumnDefault value for default empty string ("none") value */ @Test public void noneDefault() { assertEquals("Incorrect None default value", "", ColumnDefault.None.sqlLiteral()); } /** * Test ColumnDefault value for default null value */ @Test public void nullDefault() { assertEquals("Incorrect null default value", "NULL", ColumnDefault.Null.sqlLiteral()); } /** * Test ColumnDefault value for current time default value */ @Test public void currentTimeDefault() { assertEquals("Incorrect default value", "CURRENT_TIME", ColumnDefault.CurrentTime.sqlLiteral()); } /** * Test ColumnDefault value for current date default value */ @Test public void currentDateDefault() { assertEquals("Incorrect current date default value", "CURRENT_DATE", ColumnDefault.CurrentDate.sqlLiteral()); } /** * Test ColumnDefault value for current timestamp default value */ @Test public void currentTimestampDefault() { assertEquals("Incorrect current timestamp default value", "CURRENT_TIMESTAMP", ColumnDefault.CurrentTimestamp.sqlLiteral()); } }