001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.db.sql.execute;
043:
044: import org.netbeans.junit.NbTestCase;
045:
046: /**
047: *
048: * @author Andrei Badea
049: */
050: public class SQLExecuteHelperTest extends NbTestCase {
051:
052: public SQLExecuteHelperTest(String testName) {
053: super (testName);
054: }
055:
056: public void testSplit() {
057: // removing line comments
058: assertSplit("select --line\n from dual", "select from dual");
059: assertSplit("select ----line\n from dual", "select from dual");
060: assertSplit("select --line from dual", "select");
061:
062: // removing block comments
063: assertSplit("select /* block */ from dual", "select from dual");
064: assertSplit("select ///* block */ from dual",
065: "select // from dual");
066: assertSplit("select /* block * block ***/ from dual",
067: "select from dual");
068: assertSplit("select /* block from dual", "select");
069: assertSplit("select a - b / c from dual",
070: "select a - b / c from dual");
071: assertSplit("select 'foo /* bar */ -- baz' from dual",
072: "select 'foo /* bar */ -- baz' from dual");
073:
074: // ; in comments should not be considered a statement separator
075: assertSplit("select --comment; \n foo", "select foo");
076: assertSplit("select /* ; */ foo", "select foo");
077:
078: // splitting
079: assertSplit(" ;; ; ", new String[0]);
080: assertSplit(
081: "/* comment */ select foo; /* comment */ select bar -- comment",
082: new String[] { "select foo", "select bar" });
083:
084: // splitting and start/end positions
085: String test = " select foo ; select /* comment */bar;\n select baz -- comment";
086: // System.out.println(test.substring(12));
087: assertSplit(test,
088: new StatementInfo[] {
089: new StatementInfo("select foo", 0, 2, 0, 2, 12,
090: 14),
091: new StatementInfo("select bar", 15, 18, 0, 18,
092: 41, 41),
093: new StatementInfo("select baz", 42, 46, 1, 3,
094: 56, 67), });
095: }
096:
097: private static void assertSplit(String script, String expected) {
098: assertSplit(script, new String[] { expected });
099: }
100:
101: private static void assertSplit(String script, String[] expected) {
102: StatementInfo[] stmts = (StatementInfo[]) SQLExecuteHelper
103: .split(script).toArray(new StatementInfo[0]);
104: assertEquals(expected.length, stmts.length);
105: for (int i = 0; i < expected.length; i++) {
106: assertEquals(expected[i], stmts[i].getSQL());
107: }
108: }
109:
110: private static void assertSplit(String script,
111: StatementInfo[] expected) {
112: StatementInfo[] stmts = (StatementInfo[]) SQLExecuteHelper
113: .split(script).toArray(new StatementInfo[0]);
114: assertEquals(expected.length, stmts.length);
115: for (int i = 0; i < expected.length; i++) {
116: assertEquals(expected[i].getSQL(), stmts[i].getSQL());
117: assertEquals(expected[i].getRawStartOffset(), stmts[i]
118: .getRawStartOffset());
119: assertEquals(expected[i].getStartOffset(), stmts[i]
120: .getStartOffset());
121: assertEquals(expected[i].getStartLine(), stmts[i]
122: .getStartLine());
123: assertEquals(expected[i].getStartColumn(), stmts[i]
124: .getStartColumn());
125: assertEquals(expected[i].getEndOffset(), stmts[i]
126: .getEndOffset());
127: assertEquals(expected[i].getRawEndOffset(), stmts[i]
128: .getRawEndOffset());
129: }
130: }
131: }
|