This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
ima02/resources/defects4j-checkout-closure-1f/test/com/google/javascript/rhino/JSDocInfoTest.java

451 lines
14 KiB
Java
Raw Normal View History

2023-04-25 11:33:41 +00:00
/*
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Rhino code, released
* May 6, 1999.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1997-1999
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Nick Santos
*
* Alternatively, the contents of this file may be used under the terms of
* the GNU General Public License Version 2 or later (the "GPL"), in which
* case the provisions of the GPL are applicable instead of those above. If
* you wish to allow use of your version of this file only under the terms of
* the GPL and not to allow others to use your version of this file under the
* MPL, indicate your decision by deleting the provisions above and replacing
* them with the notice and other provisions required by the GPL. If you do
* not delete the provisions above, a recipient may use your version of this
* file under either the MPL or the GPL.
*
* ***** END LICENSE BLOCK ***** */
package com.google.javascript.rhino;
import static com.google.javascript.rhino.JSDocInfo.Visibility.PRIVATE;
import static com.google.javascript.rhino.JSDocInfo.Visibility.PROTECTED;
import static com.google.javascript.rhino.JSDocInfo.Visibility.PUBLIC;
import static com.google.javascript.rhino.jstype.JSTypeNative.BOOLEAN_TYPE;
import static com.google.javascript.rhino.jstype.JSTypeNative.NUMBER_OBJECT_TYPE;
import static com.google.javascript.rhino.jstype.JSTypeNative.NUMBER_TYPE;
import static com.google.javascript.rhino.jstype.JSTypeNative.STRING_TYPE;
import com.google.common.collect.Sets;
import com.google.javascript.rhino.jstype.JSType;
import com.google.javascript.rhino.jstype.JSTypeNative;
import com.google.javascript.rhino.jstype.JSTypeRegistry;
import com.google.javascript.rhino.testing.Asserts;
import com.google.javascript.rhino.testing.TestErrorReporter;
import junit.framework.TestCase;
public class JSDocInfoTest extends TestCase {
private TestErrorReporter errorReporter = new TestErrorReporter(null, null);
private JSTypeRegistry registry = new JSTypeRegistry(errorReporter);
private JSType getNativeType(JSTypeNative typeId) {
return registry.getNativeType(typeId);
}
/**
* Tests the assigned ordinal of the elements of the
* {@link JSDocInfo.Visibility} enum.
*/
public void testVisibilityOrdinal() {
assertEquals(0, PRIVATE.ordinal());
assertEquals(1, PROTECTED.ordinal());
assertEquals(2, PUBLIC.ordinal());
}
public void testSetType() {
JSDocInfo info = new JSDocInfo();
info.setType(fromString("string"));
assertNull(info.getBaseType());
assertNull(info.getDescription());
assertNull(info.getEnumParameterType());
assertEquals(0, info.getParameterCount());
assertNull(info.getReturnType());
assertTypeEquals(STRING_TYPE, resolve(info.getType()));
assertNull(info.getVisibility());
assertTrue(info.hasType());
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetTypeAndVisibility() {
JSDocInfo info = new JSDocInfo();
info.setType(fromString("string"));
info.setVisibility(PROTECTED);
assertNull(info.getBaseType());
assertNull(info.getDescription());
assertNull(info.getEnumParameterType());
assertEquals(0, info.getParameterCount());
assertNull(info.getReturnType());
assertTypeEquals(STRING_TYPE, resolve(info.getType()));
assertEquals(PROTECTED, info.getVisibility());
assertTrue(info.hasType());
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetReturnType() {
JSDocInfo info = new JSDocInfo();
info.setReturnType(fromString("string"));
assertNull(info.getBaseType());
assertNull(info.getDescription());
assertNull(info.getEnumParameterType());
assertEquals(0, info.getParameterCount());
assertTypeEquals(STRING_TYPE, resolve(info.getReturnType()));
assertNull(info.getType());
assertNull(info.getVisibility());
assertFalse(info.hasType());
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetReturnTypeAndBaseType() {
JSDocInfo info = new JSDocInfo();
info.setBaseType(
new JSTypeExpression(
new Node(Token.BANG, Node.newString("Number")), ""));
info.setReturnType(fromString("string"));
assertTypeEquals(NUMBER_OBJECT_TYPE,
resolve(info.getBaseType()));
assertNull(info.getDescription());
assertNull(info.getEnumParameterType());
assertEquals(0, info.getParameterCount());
assertTypeEquals(STRING_TYPE, resolve(info.getReturnType()));
assertNull(info.getType());
assertNull(info.getVisibility());
assertFalse(info.hasType());
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetEnumParameterType() {
JSDocInfo info = new JSDocInfo();
info.setEnumParameterType(fromString("string"));
assertNull(info.getBaseType());
assertNull(info.getDescription());
assertTypeEquals(STRING_TYPE,
resolve(info.getEnumParameterType()));
assertEquals(0, info.getParameterCount());
assertNull(info.getReturnType());
assertNull(info.getType());
assertNull(info.getVisibility());
assertFalse(info.hasType());
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testMultipleSetType() {
JSDocInfo info = new JSDocInfo();
info.setType(fromString("number"));
try {
info.setReturnType(fromString("boolean"));
fail("Expected exception");
} catch (IllegalStateException e) {}
try {
info.setEnumParameterType(fromString("string"));
fail("Expected exception");
} catch (IllegalStateException e) {}
try {
info.setTypedefType(fromString("string"));
fail("Expected exception");
} catch (IllegalStateException e) {}
assertTypeEquals(NUMBER_TYPE, resolve(info.getType()));
assertNull(info.getReturnType());
assertNull(info.getEnumParameterType());
assertNull(info.getTypedefType());
assertTrue(info.hasType());
}
public void testMultipleSetType2() {
JSDocInfo info = new JSDocInfo();
info.setReturnType(fromString("boolean"));
try {
info.setType(fromString("number"));
fail("Expected exception");
} catch (IllegalStateException e) {}
try {
info.setEnumParameterType(fromString("string"));
fail("Expected exception");
} catch (IllegalStateException e) {}
try {
info.setTypedefType(fromString("string"));
fail("Expected exception");
} catch (IllegalStateException e) {}
assertTypeEquals(BOOLEAN_TYPE,
resolve(info.getReturnType()));
assertNull(info.getEnumParameterType());
assertNull(info.getType());
assertNull(info.getTypedefType());
assertFalse(info.hasType());
}
public void testMultipleSetType3() {
JSDocInfo info = new JSDocInfo();
info.setEnumParameterType(fromString("boolean"));
try {
info.setType(fromString("number"));
fail("Expected exception");
} catch (IllegalStateException e) {}
try {
info.setReturnType(fromString("string"));
fail("Expected exception");
} catch (IllegalStateException e) {}
try {
info.setTypedefType(fromString("string"));
fail("Expected exception");
} catch (IllegalStateException e) {}
assertNull(info.getType());
assertNull(info.getTypedefType());
assertNull(info.getReturnType());
assertTypeEquals(BOOLEAN_TYPE,
resolve(info.getEnumParameterType()));
}
public void testSetTypedefType() {
JSDocInfo info = new JSDocInfo();
info.setTypedefType(fromString("boolean"));
assertTypeEquals(BOOLEAN_TYPE,
resolve(info.getTypedefType()));
assertTrue(info.hasTypedefType());
assertFalse(info.hasType());
assertFalse(info.hasEnumParameterType());
assertFalse(info.hasReturnType());
}
public void testSetConstant() {
JSDocInfo info = new JSDocInfo();
info.setConstant(true);
assertFalse(info.hasType());
assertTrue(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isDefine());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetConstructor() {
JSDocInfo info = new JSDocInfo();
info.setConstructor(true);
assertFalse(info.isConstant());
assertTrue(info.isConstructor());
assertFalse(info.isDefine());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetDefine() {
JSDocInfo info = new JSDocInfo();
info.setDefine(true);
assertTrue(info.isConstant());
assertFalse(info.isConstructor());
assertTrue(info.isDefine());
assertFalse(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetHidden() {
JSDocInfo info = new JSDocInfo();
info.setHidden(true);
assertFalse(info.hasType());
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isDefine());
assertTrue(info.isHidden());
assertFalse(info.shouldPreserveTry());
}
public void testSetShouldPreserveTry() {
JSDocInfo info = new JSDocInfo();
info.setShouldPreserveTry(true);
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isDefine());
assertFalse(info.isHidden());
assertTrue(info.shouldPreserveTry());
}
public void testSetNoTypeCheck() {
JSDocInfo info = new JSDocInfo();
info.setNoCheck(true);
assertFalse(info.isDeprecated());
assertFalse(info.isNoAlias());
assertFalse(info.isOverride());
assertTrue(info.isNoTypeCheck());
}
public void testSetOverride() {
JSDocInfo info = new JSDocInfo();
info.setOverride(true);
assertFalse(info.isDeprecated());
assertFalse(info.isNoAlias());
assertTrue(info.isOverride());
}
public void testSetExport() {
JSDocInfo info = new JSDocInfo();
info.setExport(true);
assertTrue(info.isExport());
}
public void testSetNoAlias() {
JSDocInfo info = new JSDocInfo();
info.setNoAlias(true);
assertFalse(info.isDeprecated());
assertFalse(info.isOverride());
assertTrue(info.isNoAlias());
}
public void testSetDeprecated() {
JSDocInfo info = new JSDocInfo();
info.setDeprecated(true);
assertFalse(info.isNoAlias());
assertFalse(info.isOverride());
assertTrue(info.isDeprecated());
}
public void testMultipleSetFlags1() {
JSDocInfo info = new JSDocInfo();
info.setConstant(true);
info.setConstructor(true);
info.setHidden(true);
info.setShouldPreserveTry(true);
assertFalse(info.hasType());
assertTrue(info.isConstant());
assertTrue(info.isConstructor());
assertFalse(info.isDefine());
assertTrue(info.isHidden());
assertTrue(info.shouldPreserveTry());
info.setHidden(false);
assertTrue(info.isConstant());
assertTrue(info.isConstructor());
assertFalse(info.isDefine());
assertFalse(info.isHidden());
assertTrue(info.shouldPreserveTry());
info.setConstant(false);
info.setConstructor(false);
assertFalse(info.isConstant());
assertFalse(info.isConstructor());
assertFalse(info.isDefine());
assertFalse(info.isHidden());
assertTrue(info.shouldPreserveTry());
info.setConstructor(true);
assertFalse(info.isConstant());
assertTrue(info.isConstructor());
assertFalse(info.isDefine());
assertFalse(info.isHidden());
assertTrue(info.shouldPreserveTry());
}
public void testSetFileOverviewWithDocumentationOff() {
JSDocInfo info = new JSDocInfo();
info.documentFileOverview("hi bob");
assertNull(info.getFileOverview());
}
public void testSetFileOverviewWithDocumentationOn() {
JSDocInfo info = new JSDocInfo(true);
info.documentFileOverview("hi bob");
assertEquals("hi bob", info.getFileOverview());
}
public void testSetSuppressions() {
JSDocInfo info = new JSDocInfo(true);
info.setSuppressions(Sets.newHashSet("sam", "bob"));
assertEquals(Sets.newHashSet("bob", "sam"), info.getSuppressions());
}
public void testSetModifies() {
JSDocInfo info = new JSDocInfo(true);
info.setModifies(Sets.newHashSet("this"));
assertEquals(Sets.newHashSet("this"), info.getModifies());
info = new JSDocInfo(true);
info.setModifies(Sets.newHashSet("arguments"));
assertEquals(Sets.newHashSet("arguments"), info.getModifies());
}
/** Gets the type expression for a simple type name. */
private JSTypeExpression fromString(String s) {
return new JSTypeExpression(Node.newString(s), "");
}
private JSType resolve(JSTypeExpression n, String... warnings) {
errorReporter.setWarnings(warnings);
return n.evaluate(null, registry);
}
private void assertTypeEquals(JSTypeNative a, JSType b) {
assertTypeEquals(getNativeType(a), b);
}
private void assertTypeEquals(JSType a, JSType b) {
Asserts.assertTypeEquals(a, b);
}
}