| /******************************************************************************* |
| * Copyright (c) 2011 NumberFour AG |
| * |
| * 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: |
| * NumberFour AG - initial API and Implementation (Alex Panchenko) |
| *******************************************************************************/ |
| package org.eclipse.dltk.javascript.core.tests.typeinfo; |
| |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.dltk.ast.utils.ASTUtil; |
| import org.eclipse.dltk.compiler.problem.IProblemCategory; |
| import org.eclipse.dltk.compiler.problem.IProblemIdentifier; |
| import org.eclipse.dltk.core.tests.util.StringList; |
| import org.eclipse.dltk.internal.javascript.ti.JSDocSupport; |
| import org.eclipse.dltk.internal.javascript.ti.JSMethod; |
| import org.eclipse.dltk.internal.javascript.ti.JSDocSupport.TagTokenizer; |
| import org.eclipse.dltk.javascript.ast.FunctionStatement; |
| import org.eclipse.dltk.javascript.ast.Script; |
| import org.eclipse.dltk.javascript.parser.tests.AbstractJSParserTest; |
| |
| @SuppressWarnings("restriction") |
| public class JSDocSupportTests extends AbstractJSParserTest { |
| |
| private static class Category implements IProblemCategory { |
| |
| final String name; |
| |
| public Category(String name) { |
| this.name = name; |
| } |
| |
| public String name() { |
| return name; |
| } |
| |
| public Collection<IProblemIdentifier> contents() { |
| return Collections.emptyList(); |
| } |
| |
| } |
| |
| private Set<String> parseSuppressWarnings(final StringList code) { |
| final Script script = parse(code.toString()); |
| final FunctionStatement function = uniqueResult(ASTUtil.select(script, |
| FunctionStatement.class)); |
| final JSMethod method = new JSMethod(); |
| new JSDocSupport() { |
| @Override |
| protected IProblemCategory getCategory(String categoryId) { |
| return new Category(categoryId); |
| } |
| }.processMethod(function, method, null, null); |
| final Set<String> ids = new HashSet<String>(); |
| for (IProblemCategory category : method.getSuppressedWarnings()) { |
| ids.add(category.name()); |
| } |
| return ids; |
| } |
| |
| public void testSuppressWarnings1() { |
| final StringList code = new StringList(); |
| code.add("/**"); |
| code.add("@SuppressWarnings(w1)"); |
| code.add("*/"); |
| code.add("function hello(){}"); |
| assertEquals(Collections.singleton("w1"), parseSuppressWarnings(code)); |
| } |
| |
| public void testSuppressWarnings2() { |
| final StringList code = new StringList(); |
| code.add("/**"); |
| code.add("@SuppressWarnings(\"w1\")"); |
| code.add("*/"); |
| code.add("function hello(){}"); |
| assertEquals(Collections.singleton("w1"), parseSuppressWarnings(code)); |
| } |
| |
| public void testSuppressWarnings3() { |
| final StringList code = new StringList(); |
| code.add("/**"); |
| code.add("@SuppressWarnings( \"w1\" , w2 )"); |
| code.add("*/"); |
| code.add("function hello(){}"); |
| final Set<String> warningIds = new HashSet<String>(); |
| Collections.addAll(warningIds, "w1", "w2"); |
| assertEquals(warningIds, parseSuppressWarnings(code)); |
| } |
| |
| public void testSuppressWarnings4() { |
| final StringList code = new StringList(); |
| code.add("/**"); |
| code.add("@SuppressWarnings \"w1\" , w2"); |
| code.add("*/"); |
| code.add("function hello(){}"); |
| final Set<String> warningIds = new HashSet<String>(); |
| Collections.addAll(warningIds, "w1", "w2"); |
| assertEquals(warningIds, parseSuppressWarnings(code)); |
| } |
| |
| public void testTagTokenizer() { |
| final TagTokenizer tokenizer = new TagTokenizer("A B C"); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("A", tokenizer.nextToken()); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("B", tokenizer.nextToken()); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("C", tokenizer.nextToken()); |
| assertFalse(tokenizer.hasMoreTokens()); |
| } |
| |
| public void testTagTokenizerParam() { |
| final TagTokenizer tokenizer = new TagTokenizer("{String} name"); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("{String}", tokenizer.nextToken()); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("name", tokenizer.nextToken()); |
| assertFalse(tokenizer.hasMoreTokens()); |
| } |
| |
| public void testTagTokenizerParamRecord() { |
| final TagTokenizer tokenizer = new TagTokenizer( |
| "{{name:String, email:String}} contact"); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("{{name:String, email:String}}", tokenizer.nextToken()); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("contact", tokenizer.nextToken()); |
| assertFalse(tokenizer.hasMoreTokens()); |
| } |
| |
| public void testTagTokenizerRecordType() { |
| final TagTokenizer tokenizer = new TagTokenizer( |
| "{{name:String, email:String}}"); |
| assertTrue(tokenizer.hasMoreTokens()); |
| assertEquals("{{name:String, email:String}}", tokenizer.nextToken()); |
| assertFalse(tokenizer.hasMoreTokens()); |
| } |
| |
| } |