blob: 324b160710241c3425b726b3aa45178c399f332e [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python;
import com.intellij.testFramework.UsefulTestCase;
import com.jetbrains.python.documentation.EpydocString;
import com.jetbrains.python.toolbox.Substring;
import java.util.List;
/**
* @author yole
*/
public class EpydocStringTest extends UsefulTestCase {
public void testTagValue() {
EpydocString docString = new EpydocString("@rtype: C{str}");
Substring s = docString.getTagValue("rtype");
assertNotNull(s);
assertEquals("C{str}", s.toString());
}
public void testTagWithParamValue() {
EpydocString docString = new EpydocString("@type m: number");
final Substring s = docString.getTagValue("type", "m");
assertNotNull(s);
assertEquals("number", s.toString());
}
public void testMultilineTag() {
EpydocString docString = new EpydocString(" @param b: The y intercept of the line. The X{y intercept} of a\n" +
" line is the point at which it crosses the y axis (M{x=0}).");
final Substring s = docString.getTagValue("param", "b");
assertNotNull(s);
assertEquals("The y intercept of the line. The X{y intercept} of a line is the point at which it crosses the y axis (M{x=0}).",
s.concatTrimmedLines(" "));
}
public void testInlineMarkup() {
assertEquals("The y intercept of the line. The y intercept of a line is the point at which it crosses the y axis (x=0).",
EpydocString.removeInlineMarkup("The y intercept of the line. The X{y intercept} of a line is the point at which it crosses the y axis (M{x=0})."));
}
public void testMultipleTags() {
EpydocString docString = new EpydocString(" \"\"\"\n" +
" Run the given function wrapped with seteuid/setegid calls.\n" +
"\n" +
" This will try to minimize the number of seteuid/setegid calls, comparing\n" +
" current and wanted permissions\n" +
"\n" +
" @param euid: effective UID used to call the function.\n" +
" @type euid: C{int}\n" +
"\n" +
" @param egid: effective GID used to call the function.\n" +
" @type egid: C{int}\n" +
"\n" +
" @param function: the function run with the specific permission.\n" +
" @type function: any callable\n" +
"\n" +
" @param *args: arguments passed to function\n" +
" @param **kwargs: keyword arguments passed to C{function}\n" +
" \"\"\"");
final List<String> params = docString.getParameters();
assertOrderedEquals(params, "euid", "egid", "function", "*args", "**kwargs");
assertEquals("effective UID used to call the function.", docString.getParamDescription("euid"));
assertEquals("effective GID used to call the function.", docString.getParamDescription("egid"));
assertEquals("arguments passed to function.", docString.getParamDescription("args"));
}
public void testInlineMarkupToHTML() {
assertEquals("can contain <i>inline markup</i> and <b>bold text</b>", EpydocString.inlineMarkupToHTML("can contain I{inline markup} and B{bold text}"));
}
public void testCodeToHTML() {
assertEquals("<code>my_dict={1:2, 3:4}</code>", EpydocString.inlineMarkupToHTML("C{my_dict={1:2, 3:4}}"));
}
public void testUrlToHTML() {
assertEquals("<a href=\"http://www.python.org\">www.python.org</a>", EpydocString.inlineMarkupToHTML("U{www.python.org}"));
assertEquals("<a href=\"http://www.python.org\">www.python.org</a>", EpydocString.inlineMarkupToHTML("U{www.python.org}"));
assertEquals("<a href=\"http://epydoc.sourceforge.net\">The epydoc homepage</a>",
EpydocString.inlineMarkupToHTML("U{The epydoc homepage<http://\n" +
" epydoc.sourceforge.net>}"));
}
public void testNestedInlineMarkup() {
assertEquals("<i><b>Inline markup</b> may be nested; and it may span</i> multiple lines.",
EpydocString.inlineMarkupToHTML("I{B{Inline markup} may be nested; and\n" +
" it may span} multiple lines."));
}
public void testParagraph() {
assertEquals("foo<p>bar", EpydocString.inlineMarkupToHTML("foo\n\nbar"));
}
public void testRemoveNestedInlineMarkup() {
assertEquals("(ParsedDocstring, list of Field)",
EpydocString.removeInlineMarkup("C{(L{ParsedDocstring}, list of L{Field})}"));
}
}