/*******************************************************************************
* Copyright (c) 2013 Stefan Seelmann and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Stefan Seelmann - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.markdown.tests;
import java.util.List;
import org.eclipse.mylyn.wikitext.markdown.internal.validation.LinkDefinitionValidationRule;
import org.eclipse.mylyn.wikitext.validation.MarkupValidator;
import org.eclipse.mylyn.wikitext.validation.ValidationProblem;
import org.eclipse.mylyn.wikitext.validation.ValidationProblem.Severity;
import junit.framework.TestCase;
public class LinkDefinitionValidationRuleTest extends TestCase {
private LinkDefinitionValidationRule rule;
private MarkupValidator validator;
@Override
protected void setUp() throws Exception {
super.setUp();
rule = new LinkDefinitionValidationRule();
validator = new MarkupValidator();
validator.getRules().add(rule);
}
public void testNoProblemIfLinkDefinitionExistsWithExplicitLinkName() {
final String markup = "[Google][Google]\n\n[Google]: http://www.google.com/";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertTrue(problems.isEmpty());
}
public void testNoProblemIfLinkDefinitionExistsWithImplicitLinkName() {
final String markup = "[Bing][]\n\n[Bing]: http://www.bing.com/";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertTrue(problems.isEmpty());
}
public void testErrorIfLinkDefinitionDoesNotExist() {
final String markup = "[Yahoo][yahoo]";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertEquals(1, problems.size());
assertEquals(0, problems.get(0).getOffset());
assertEquals(14, problems.get(0).getLength());
assertEquals(Severity.ERROR, problems.get(0).getSeverity());
assertTrue(problems.get(0).getMessage().contains("yahoo"));
assertTrue(problems.get(0).getMessage().contains("missing"));
}
public void testWarningIfLinkDefinitionIsUnused() {
final String markup = "[ddg]: https://duckduckgo.com/";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertEquals(1, problems.size());
assertEquals(0, problems.get(0).getOffset());
assertEquals(30, problems.get(0).getLength());
assertEquals(Severity.WARNING, problems.get(0).getSeverity());
assertTrue(problems.get(0).getMessage().contains("ddg"));
assertTrue(problems.get(0).getMessage().contains("never used"));
}
public void testWarningIfLinkDefinitionWithLeadingSpacesIsUnused() {
final String markup = " [ddg]: https://duckduckgo.com/";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertEquals(1, problems.size());
assertEquals(2, problems.get(0).getOffset());
assertEquals(30, problems.get(0).getLength());
assertEquals(Severity.WARNING, problems.get(0).getSeverity());
assertTrue(problems.get(0).getMessage().contains("ddg"));
assertTrue(problems.get(0).getMessage().contains("never used"));
}
public void testErrorIfLinkDefinitionDoesNotExistWithinHeading() {
final String markup = "# Heading with [Link][link]";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertEquals(1, problems.size());
assertEquals(15, problems.get(0).getOffset());
assertEquals(12, problems.get(0).getLength());
assertEquals(Severity.ERROR, problems.get(0).getSeverity());
assertTrue(problems.get(0).getMessage().contains("link"));
assertTrue(problems.get(0).getMessage().contains("missing"));
}
public void testErrorIfLinkDefinitionDoesNotExistWithinUnderlinedHeading() {
final String markup = "Heading with [Link][link]\n=============";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertEquals(1, problems.size());
assertEquals(13, problems.get(0).getOffset());
assertEquals(12, problems.get(0).getLength());
assertEquals(Severity.ERROR, problems.get(0).getSeverity());
assertTrue(problems.get(0).getMessage().contains("link"));
assertTrue(problems.get(0).getMessage().contains("missing"));
}
public void testErrorIfLinkDefinitionDoesNotExistWithinBlockquote() {
final String markup = "> [Link][link] within blockquote";
List<ValidationProblem> problems = rule.findProblems(markup, 0, markup.length());
assertNotNull(problems);
assertEquals(1, problems.size());
assertEquals(2, problems.get(0).getOffset());
assertEquals(12, problems.get(0).getLength());
assertEquals(Severity.ERROR, problems.get(0).getSeverity());
assertTrue(problems.get(0).getMessage().contains("link"));
assertTrue(problems.get(0).getMessage().contains("missing"));
}
}