blob: 7769f4ef48355a33d50bc322b07439c316b8c5b2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 Christian Pontesegger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christian Pontesegger - initial API and implementation
*******************************************************************************/
package org.eclipse.ease.helpgenerator.documentation;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class ReferenceTokenizerTest {
@Test
@DisplayName("getSimpleClassName('java.lang.String') returns last part of FQN")
public void getSimpleClassNameReturnsLastPartOfFQN() {
assertEquals("String", ReferenceTokenizer.getSimpleClassName("java.lang.String"));
}
@Test
@DisplayName("getSimpleClassName('String') returns simple name")
public void getSimpleClassNameReturnsSimpleString() {
assertEquals("String", ReferenceTokenizer.getSimpleClassName("String"));
}
@Test
@DisplayName("getPackageName('java.lang.String') returns 'java.lang'")
public void getPackageNameReturnsPackage() {
assertEquals("java.lang", ReferenceTokenizer.getPackageName("java.lang.String"));
}
@Test
@DisplayName("getPackageName('String') returns empty string")
public void getPackageNameReturnsEmptyString() {
assertEquals("", ReferenceTokenizer.getPackageName("String"));
}
@Test
@DisplayName("getPackageName('String') + getSimpleClassName() return FQN")
public void getPackageNameAndGetSimpleNameConBeCombined() {
assertEquals("java.lang.String",
ReferenceTokenizer.getPackageName("java.lang.String") + "." + ReferenceTokenizer.getSimpleClassName("java.lang.String"));
}
@Test
@DisplayName("tokenize throws on invalid reference")
public void tokenizeInvalidReference() {
assertThrows(IOException.class, () -> new ReferenceTokenizer("{@dead}"));
}
@Test
@DisplayName("tokenize '{@link java.io.File}'")
public void tokenizeClassLink() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link java.io.File}");
assertTrue(tokenizer.isLink());
assertEquals("java.io.File", tokenizer.getQualifiedName());
assertNull(tokenizer.getMethod());
assertNull(tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertFalse(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertTrue(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link java.io.File#pathSeparator}'")
public void tokenizeClassField() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link java.io.File#pathSeparator}");
assertTrue(tokenizer.isLink());
assertEquals("java.io.File", tokenizer.getQualifiedName());
assertEquals("pathSeparator", tokenizer.getMethod());
assertNull(tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertFalse(tokenizer.isMethod());
assertTrue(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link java.lang.String#getBytes()}'")
public void tokenizeClassMethodWithoutParameters() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link java.lang.String#getBytes()}");
assertTrue(tokenizer.isLink());
assertEquals("java.lang.String", tokenizer.getQualifiedName());
assertEquals("getBytes", tokenizer.getMethod());
assertEquals("", tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertTrue(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link #getBytes()}'")
public void tokenizeLocalClassMethod() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link #getBytes()}");
assertTrue(tokenizer.isLink());
assertEquals("", tokenizer.getQualifiedName());
assertEquals("getBytes", tokenizer.getMethod());
assertEquals("", tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertTrue(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link #pathSeparator}'")
public void tokenizeLocalClassField() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link #pathSeparator}");
assertTrue(tokenizer.isLink());
assertEquals("", tokenizer.getQualifiedName());
assertEquals("pathSeparator", tokenizer.getMethod());
assertNull(tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertFalse(tokenizer.isMethod());
assertTrue(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link java.lang.String#copyValueOf(char[], int, int)}'")
public void tokenizeClassMethodWithParameters() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link java.lang.String#copyValueOf(char[], int, int)}");
assertTrue(tokenizer.isLink());
assertEquals("java.lang.String", tokenizer.getQualifiedName());
assertEquals("copyValueOf", tokenizer.getMethod());
assertEquals("char[], int, int", tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertTrue(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link java.lang.String#String(byte[])}'")
public void tokenizeClassConstructor() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link java.lang.String#String(byte[])}");
assertTrue(tokenizer.isLink());
assertEquals("java.lang.String", tokenizer.getQualifiedName());
assertEquals("String", tokenizer.getMethod());
assertEquals("byte[]", tokenizer.getParameters());
assertTrue(tokenizer.isConstructor());
assertFalse(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@module #methodName()}'")
public void tokenizeLocalModuleMethod() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@module #methodName()}");
assertTrue(tokenizer.isModule());
assertEquals("", tokenizer.getQualifiedName());
assertEquals("methodName", tokenizer.getMethod());
assertEquals("", tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertTrue(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@module #fieldName}'")
public void tokenizeModuleConstant() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@module #fieldName}");
assertTrue(tokenizer.isModule());
assertEquals("", tokenizer.getQualifiedName());
assertEquals("fieldName", tokenizer.getMethod());
assertNull(tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertFalse(tokenizer.isMethod());
assertTrue(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@module module.id.of.target.module#methodName()}'")
public void tokenizeExternalModuleMethod() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@module module.id.of.target.module#methodName()}");
assertTrue(tokenizer.isModule());
assertEquals("module.id.of.target.module", tokenizer.getQualifiedName());
assertEquals("methodName", tokenizer.getMethod());
assertEquals("", tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertTrue(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@module module.id.of.target.module}'")
public void tokenizeExternalModule() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@module module.id.of.target.module}");
assertTrue(tokenizer.isModule());
assertEquals("module.id.of.target.module", tokenizer.getQualifiedName());
assertNull(tokenizer.getMethod());
assertNull(tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertFalse(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertTrue(tokenizer.isClass());
}
@Test
@DisplayName("tokenize '{@link String#getBytes()}'")
public void tokenizeSimpleClassName() throws IOException {
final ReferenceTokenizer tokenizer = new ReferenceTokenizer("{@link String#getBytes()}", name -> "java.lang." + name);
assertTrue(tokenizer.isLink());
assertEquals("java.lang.String", tokenizer.getQualifiedName());
assertEquals("getBytes", tokenizer.getMethod());
assertEquals("", tokenizer.getParameters());
assertFalse(tokenizer.isConstructor());
assertTrue(tokenizer.isMethod());
assertFalse(tokenizer.isField());
assertFalse(tokenizer.isClass());
}
}