/* * Copyright (c) 2016 Tada AB and other contributors, as listed below. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the The BSD 3-Clause License * which accompanies this distribution, and is available at * http://opensource.org/licenses/BSD-3-Clause * * Contributors: * Chapman Flack */ package org.postgresql.pljava; import java.util.regex.Matcher; import junit.framework.TestCase; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import static org.postgresql.pljava.sqlgen.Lexicals.ISO_AND_PG_IDENTIFIER_CAPTURING; import static org.postgresql.pljava.sqlgen.Lexicals.identifierFrom; import org.postgresql.pljava.sqlgen.Lexicals.Identifier; public class LexicalsTest extends TestCase { public LexicalsTest(String name) { super(name); } public void testIdentifierFrom() throws Exception { Matcher m = ISO_AND_PG_IDENTIFIER_CAPTURING.matcher("anIdentifier"); assertTrue("i", m.matches()); assertEquals("anIdentifier", identifierFrom(m).nonFolded()); m.reset("\"an\"\"Identifier\"\"\""); assertTrue("xd", m.matches()); assertEquals("an\"Identifier\"", identifierFrom(m).nonFolded()); m.reset("u&\"an\\0049dent\"\"if\\+000069er\""); assertTrue("xui2", m.matches()); assertEquals("anIdent\"ifier", identifierFrom(m).nonFolded()); m.reset("u&\"an@@\"\"@0049dent@+000069fier\"\"\" uescape '@'"); assertTrue("xui3", m.matches()); assertEquals("an@\"Identifier\"", identifierFrom(m).nonFolded()); } public void testIdentifierEquivalence() throws Exception { Identifier baß = Identifier.from("baß", false); Identifier Baß = Identifier.from("Baß", false); Identifier bass = Identifier.from("bass", false); Identifier BASS = Identifier.from("BASS", false); Identifier qbaß = Identifier.from("baß", true); Identifier qBaß = Identifier.from("Baß", true); Identifier qbass = Identifier.from("bass", true); Identifier qBASS = Identifier.from("BASS", true); Identifier sab = Identifier.from("sopran alt baß", true); Identifier SAB = Identifier.from("Sopran Alt Baß", true); /* DESERET SMALL LETTER OW */ Identifier ow = Identifier.from("\uD801\uDC35", false); /* DESERET CAPITAL LETTER OW */ Identifier OW = Identifier.from("\uD801\uDC0D", false); assertEquals("hash1", baß.hashCode(), Baß.hashCode()); assertEquals("hash2", baß.hashCode(), bass.hashCode()); assertEquals("hash3", baß.hashCode(), BASS.hashCode()); assertEquals("hash4", baß.hashCode(), qbaß.hashCode()); assertEquals("hash5", baß.hashCode(), qBaß.hashCode()); assertEquals("hash6", baß.hashCode(), qbass.hashCode()); assertEquals("hash7", baß.hashCode(), qBASS.hashCode()); assertEquals("hash8", ow.hashCode(), OW.hashCode()); assertEquals("eq1", baß, Baß); assertEquals("eq2", baß, bass); assertEquals("eq3", baß, BASS); assertEquals("eq4", Baß, qbaß); assertEquals("eq5", Baß, qBASS); assertEquals("eq6", ow, OW); assertThat("ne1", Baß, not(equalTo(qBaß))); assertThat("ne2", Baß, not(equalTo(qbass))); assertThat("ne3", sab, not(equalTo(SAB))); } }