[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 +