[CVS snippet] Added support for line numbers
Aslak Hellesoy <rinkrank-yCVjj/[email protected]> Wed, 25 Feb 2004 16:49:26 -0600
| Newsgroups | gmane.comp.java.nanocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit in snippet/src on MAIN
main/snippet/SnippetMacro.java +5 -3 1.3 -> 1.4
/SnippetReader.java +19 -1 1.2 -> 1.3
test/snippet/SnippetMacroTest.java +14 -5 1.3 -> 1.4
/SnippetReaderTest.java +64 -2 1.3 -> 1.4
+102 -11
4 modified files
Added support for line numbers
----------
snippet /src /main /snippet
SnippetMacro.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SnippetMacro.java 25 Feb 2004 22:35:51 -0000 1.3
+++ SnippetMacro.java 25 Feb 2004 22:49:25 -0000 1.4
@@ -26,6 +26,7 @@
required(id, "id");
String urlParam = parameter.get("url");
required(urlParam, "url");
+ String linesParam = parameter.get("linenumbers");
URL url;
try {
url = new URL(urlParam);
@@ -34,7 +35,8 @@
}
String lang = parameter.get("lang");
- StringBuffer snippet = getSnippet(url, id);
+ boolean useLines = "true".equals(linesParam);
+ StringBuffer snippet = getSnippet(url, id, useLines);
if(lang != null) {
snippet.insert(0, EOL);
@@ -45,7 +47,7 @@
writer.write(snippet.toString());
}
- StringBuffer getSnippet(URL url, String id) throws IOException {
+ StringBuffer getSnippet(URL url, String id, boolean useLines) throws IOException {
StringBuffer result;
String cachedSnippet = (String) getCachedSnippet(url, id);
if(cachedSnippet != null) {
@@ -55,7 +57,7 @@
}
}
else {
- result = new SnippetReader(url).readSnippet(id);
+ result = new SnippetReader(url).readSnippet(id, useLines);
cacheSnippet(url, id, result.toString());
if (debug) {
result.append("(Fetched from url, cache content " + cache + ")");
----------
snippet /src /main /snippet
SnippetReader.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SnippetReader.java 25 Feb 2004 22:08:05 -0000 1.2
+++ SnippetReader.java 25 Feb 2004 22:49:25 -0000 1.3
@@ -7,6 +7,8 @@
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
+import java.text.NumberFormat;
+import java.text.DecimalFormat;
public class SnippetReader {
private static final String EOL = System.getProperty("line.separator");
@@ -17,18 +19,34 @@
this.source = source;
}
- public StringBuffer readSnippet(String snippetId) throws IOException {
+ public StringBuffer readSnippet(String snippetId, boolean useLineNumbers) throws IOException {
List lines = readLines(snippetId);
int minIndent = minIndent(lines);
StringBuffer result = new StringBuffer();
+ NumberFormat intFormat = new DecimalFormat(getFormat(lines.size()));
+ int lineNumber = 1;
for (Iterator iterator = lines.iterator(); iterator.hasNext();) {
String line = (String) iterator.next();
if (!isDemarcator(line)) {
+ if(useLineNumbers) {
+ String l = intFormat.format(lineNumber);
+ result.append(l).append(". ");
+ lineNumber++;
+ }
result.append(line.substring(minIndent));
result.append(EOL);
}
}
return result;
+ }
+
+ private String getFormat(int numberOfLines) {
+ int numberOfDigits = (numberOfLines / 10) + 1;
+ StringBuffer format = new StringBuffer();
+ for(int i = 0; i < numberOfDigits; i++) {
+ format.append('0');
+ }
+ return format.toString();
}
int minIndent(List lines) {
----------
snippet /src /test /snippet
SnippetMacroTest.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SnippetMacroTest.java 25 Feb 2004 22:22:03 -0000 1.3
+++ SnippetMacroTest.java 25 Feb 2004 22:49:26 -0000 1.4
@@ -59,21 +59,21 @@
String id = "snippet id";
String content = "cached content";
snippetMacro.cacheSnippet(url, id, content);
- assertEquals(content, snippetMacro.getSnippet(url, id).toString());
+ assertEquals(content, snippetMacro.getSnippet(url, id, true).toString());
}
public void testRemovesSnippetFromCacheWhenTimedOut() throws IOException {
assertEquals("assertEquals(2, 1 + 1);" + EOL,
- snippetMacro.getSnippet(snippetUrl(), "mySnippetId").toString());
+ snippetMacro.getSnippet(snippetUrl(), "mySnippetId", false).toString());
snippetMacro.cacheSnippet(snippetUrl(), "mySnippetId", "different cache content");
assertEquals(System.currentTimeMillis(), snippetMacro.getTimeCached(snippetUrl(), "mySnippetId"));
assertFalse(snippetMacro.isCacheTimedout(snippetUrl(), "mySnippetId"));
assertEquals("different cache content",
- snippetMacro.getSnippet(snippetUrl(), "mySnippetId").toString());
+ snippetMacro.getSnippet(snippetUrl(), "mySnippetId", true).toString());
snippetMacro.setCacheTimeout(0);
assertTrue(snippetMacro.isCacheTimedout(snippetUrl(), "mySnippetId"));
assertEquals("assertEquals(2, 1 + 1);" + EOL,
- snippetMacro.getSnippet(snippetUrl(), "mySnippetId").toString());
+ snippetMacro.getSnippet(snippetUrl(), "mySnippetId", false).toString());
}
@@ -81,7 +81,16 @@
}
- public void TODOtestPutsInLineNumbersIfSpecified() {
+ public void testPutsInLineNumbersIfSpecified() throws IOException {
+ parameter.setParams("lang=java|linenumbers=true|id=multilineSnippet|url=" + snippetUrl().toExternalForm());
+ assertEquals("{code:lang=java}" + EOL +
+ "1. assertEquals(2, 1 + 1);" + EOL +
+ "2. if(true) {" + EOL +
+ "3. assertEquals(6, 2 * 3);" + EOL +
+ "4. }" + EOL +
+ "5. assertEquals(2, 4 / 2);" + EOL +
+ "{code}",
+ executeMacro());
}
public void TODOtestUnindentsIfSpecified() {
----------
snippet /src /test /snippet
SnippetReaderTest.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SnippetReaderTest.java 25 Feb 2004 22:08:05 -0000 1.3
+++ SnippetReaderTest.java 25 Feb 2004 22:49:26 -0000 1.4
@@ -53,7 +53,7 @@
public void testCanReadSnippetFromThisJavaFile() throws IOException {
SnippetReader snippetReader = new SnippetReader(getResource("SnippetReaderTest.java"));
- String snippet = snippetReader.readSnippet("mySnippetId").toString();
+ String snippet = snippetReader.readSnippet("mySnippetId", false).toString();
assertEquals("assertEquals(2, 1 + 1);" + EOL, snippet);
}
@@ -69,9 +69,71 @@
// END SNIPPET: multilineSnippet
}
+ public void testTheObviousIsTrueNineLines() {
+ // START SNIPPET: ninelineSnippet
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ if (true) {
+ assertEquals(2, 1 + 1);
+ }
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ // END SNIPPET: ninelineSnippet
+ }
+
+ public void testTheObviousIsTrueTenLines() {
+ // START SNIPPET: tenlineSnippet
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ if (true) {
+ assertEquals(2, 1 + 1);
+ }
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ assertEquals(2, 1 + 1);
+ // END SNIPPET: tenlineSnippet
+ }
+
+ public void testSnippetsWithLessThanTenLinesHaveOneDigitLineNumbers() throws IOException {
+ SnippetReader snippetReader = new SnippetReader(getResource("SnippetReaderTest.java"));
+ String snippet = snippetReader.readSnippet("ninelineSnippet", true).toString();
+ assertEquals(
+ "1. assertEquals(2, 1 + 1);" + EOL +
+ "2. assertEquals(2, 1 + 1);" + EOL +
+ "3. if (true) {" + EOL +
+ "4. assertEquals(2, 1 + 1);" + EOL +
+ "5. }" + EOL +
+ "6. assertEquals(2, 1 + 1);" + EOL +
+ "7. assertEquals(2, 1 + 1);" + EOL +
+ "8. assertEquals(2, 1 + 1);" + EOL +
+ "9. assertEquals(2, 1 + 1);" + EOL,
+ snippet);
+ }
+
+ public void testSnippetsWithTenLinesOrMoreHaveTwoDigitLineNumbers() throws IOException {
+ SnippetReader snippetReader = new SnippetReader(getResource("SnippetReaderTest.java"));
+ String snippet = snippetReader.readSnippet("tenlineSnippet", true).toString();
+ assertEquals(
+ "01. assertEquals(2, 1 + 1);" + EOL +
+ "02. assertEquals(2, 1 + 1);" + EOL +
+ "03. if (true) {" + EOL +
+ "04. assertEquals(2, 1 + 1);" + EOL +
+ "05. }" + EOL +
+ "06. assertEquals(2, 1 + 1);" + EOL +
+ "07. assertEquals(2, 1 + 1);" + EOL +
+ "08. assertEquals(2, 1 + 1);" + EOL +
+ "09. assertEquals(2, 1 + 1);" + EOL +
+ "10. assertEquals(2, 1 + 1);" + EOL,
+ snippet);
+ }
+
public void testCanReadSnippetsWithSeveralLinesAndNestedSnippet() throws IOException {
SnippetReader snippetReader = new SnippetReader(getResource("SnippetReaderTest.java"));
- String snippet = snippetReader.readSnippet("multilineSnippet").toString();
+ String snippet = snippetReader.readSnippet("multilineSnippet", false).toString();
assertEquals(
"assertEquals(2, 1 + 1);" + EOL +
"if(true) {" + EOL +