blob: d11f7f8e2ae583ed0a9e9676731f26592d5b8e1b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 xored software, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.parser.tests;
import java.util.List;
import org.eclipse.dltk.core.tests.util.StringList;
import org.eclipse.dltk.javascript.parser.jsdoc.JSDocTag;
import org.eclipse.dltk.javascript.parser.jsdoc.JSDocTags;
import org.eclipse.dltk.javascript.parser.jsdoc.SimpleJSDocParser;
import org.junit.Assert;
import org.junit.Test;
public class SimpleJSDocParserTests extends Assert {
private List<JSDocTag> parse(String content) {
final JSDocTags tags = new SimpleJSDocParser().parse(content, 0);
return tags.list();
}
@Test
public void testSimple() {
StringList code = new StringList();
code.add("/**");
code.add(" * @param x");
code.add(" * @param y");
code.add(" * @param z");
code.add(" */");
List<JSDocTag> tags = parse(code.toString());
assertEquals(3, tags.size());
assertEquals(JSDocTag.PARAM, tags.get(0).name());
assertEquals(JSDocTag.PARAM, tags.get(1).name());
assertEquals(JSDocTag.PARAM, tags.get(2).name());
assertEquals("x", tags.get(0).value());
assertEquals("y", tags.get(1).value());
assertEquals("z", tags.get(2).value());
}
@Test
public void testEmptyLines() {
StringList code = new StringList();
code.add("/**");
code.add(" * @param x");
code.add(" *");
code.add(" * @param y");
code.add(" *");
code.add(" * @param z");
code.add(" */");
List<JSDocTag> tags = parse(code.toString());
assertEquals(3, tags.size());
assertEquals(JSDocTag.PARAM, tags.get(0).name());
assertEquals(JSDocTag.PARAM, tags.get(1).name());
assertEquals(JSDocTag.PARAM, tags.get(2).name());
assertEquals("x", tags.get(0).value());
assertEquals("y", tags.get(1).value());
assertEquals("z", tags.get(2).value());
}
@Test
public void testNotLineStart() {
StringList code = new StringList();
code.add("/**");
code.add(" * A @param x");
code.add(" * @param y");
code.add(" * B @param z");
code.add(" */");
List<JSDocTag> tags = parse(code.toString());
assertEquals(1, tags.size());
assertEquals(JSDocTag.PARAM, tags.get(0).name());
assertEquals("y B @param z", tags.get(0).value());
}
@Test
public void testSuppressWarnings() {
StringList code = new StringList();
code.add("/**");
code.add(" * " + JSDocTag.SUPPRESS_WARNINGS + "(all)");
code.add(" */");
final String string = code.toString();
List<JSDocTag> tags = parse(string);
assertEquals(1, tags.size());
final JSDocTag tag = tags.get(0);
assertEquals(JSDocTag.SUPPRESS_WARNINGS, tag.name());
assertEquals("(all)", tag.value());
assertEquals(string.indexOf(")"),
tag.fromValueOffset(tag.value().indexOf(")")));
assertEquals(tag.value().indexOf(")"),
tag.toValueOffset(string.indexOf(")")));
}
@Test
public void testTagWithNumbers() {
StringList code = new StringList();
code.add("/**");
code.add(" * @web2.0");
code.add(" */");
List<JSDocTag> tags = parse(code.toString());
assertEquals(1, tags.size());
assertEquals("@web2.0", tags.get(0).name());
}
@Test
public void testMultiLine() {
final StringList code = new StringList();
code.add("/**");
code.add(" * @print Hello,");
code.add(" * world");
code.add(" * ! ");
code.add(" */");
final String string = code.toString();
final List<JSDocTag> tags = parse(string);
assertEquals(1, tags.size());
final JSDocTag tag = tags.get(0);
assertEquals("@print", tag.name());
assertEquals("Hello, world !", tag.value());
assertEquals(string.indexOf("@print"), tag.start());
assertEquals(string.indexOf("Hello"), tag.valueStart());
assertEquals(string.indexOf("!") + 1, tag.end());
assertEquals(string.indexOf("!"),
tag.fromValueOffset(tag.value().indexOf("!")));
assertEquals(tag.value().indexOf("!"),
tag.toValueOffset(string.indexOf("!")));
}
@Test
public void testMultiLineReturn() {
final StringList code = new StringList();
code.add("/**");
code.add(" * @return {");
code.add(" * String");
code.add(" * |Number");
code.add(" * |Date");
code.add(" * }");
code.add(" */");
final String string = code.toString();
final List<JSDocTag> tags = parse(string);
assertEquals(1, tags.size());
final JSDocTag tag = tags.get(0);
assertEquals("@return", tag.name());
assertEquals("{ String |Number |Date }", tag.value());
assertEquals(string.indexOf("@return"), tag.start());
assertEquals(string.indexOf("{"), tag.valueStart());
assertEquals(string.indexOf("}") + 1, tag.end());
assertEquals(string.indexOf("String"),
tag.fromValueOffset(tag.value().indexOf("String")));
assertEquals(tag.value().indexOf("Number"),
tag.toValueOffset(string.indexOf("Number")));
assertEquals(tag.value().indexOf("Date"),
tag.toValueOffset(string.indexOf("Date")));
}
@Test
public void testMultiLineEmpty() {
final StringList code = new StringList();
code.add("/**");
code.add(" * @print ");
code.add(" * ");
code.add(" * ");
code.add(" */");
final String string = code.toString();
final List<JSDocTag> tags = parse(string);
assertEquals(1, tags.size());
final JSDocTag tag = tags.get(0);
assertEquals("@print", tag.name());
assertEquals("", tag.value());
assertEquals(string.indexOf("@print"), tag.start());
assertEquals(string.indexOf("@print") + "@print".length(), tag.end());
assertEquals(string.indexOf("@print") + "@print".length(),
tag.valueStart());
}
}