Skip to content

Commit 88c296c

Browse files
committed
Unit test coverage improvements, to get to 70%/60% level (line/branch) for 2.6
1 parent ff2a73a commit 88c296c

File tree

9 files changed

+279
-88
lines changed

9 files changed

+279
-88
lines changed

release-notes/CREDITS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,8 @@ Derek Clarkson (drekka@github)
5757
Masaru Hasegawa (masaruh@github):
5858
* Reported, contributed fix for#182: Inconsistent TextBuffer#getTextBuffer behavior
5959
(2.6.0)
60+
61+
Ruediger Moeller (RuedigerMoeller@github)
62+
* Requested #195: Add `JsonGenerator.getOutputBuffered()` to find out amount of content buffered,
63+
not yet flushed.
64+
(2.6.0)

src/main/java/com/fasterxml/jackson/core/util/VersionUtil.java

Lines changed: 12 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
* 2.1 and 2.2; earlier code used file named "VERSION.txt"; but this has serious
2020
* performance issues on some platforms (Android), so a replacement system
2121
* was implemented to use class generation and dynamic class loading.
22+
*<p>
23+
* Note that functionality for reading "VERSION.txt" was removed completely
24+
* from Jackson 2.6.
2225
*/
2326
public class VersionUtil
2427
{
@@ -64,31 +67,11 @@ protected VersionUtil()
6467
* First, tries to load version info from a class named
6568
* "PackageVersion" in the same package as the class.
6669
*
67-
* Next, if that fails, class loader that loaded specified class is
68-
* asked to load resource with name "VERSION" from same location
69-
* (package) as class itself had.
70-
*
7170
* If no version information is found, {@link Version#unknownVersion()} is returned.
7271
*/
73-
@SuppressWarnings("resource")
7472
public static Version versionFor(Class<?> cls)
7573
{
76-
Version packageVersion = packageVersionFor(cls);
77-
if (packageVersion != null) {
78-
return packageVersion;
79-
}
80-
final InputStream in = cls.getResourceAsStream("VERSION.txt");
81-
if (in == null) {
82-
return Version.unknownVersion();
83-
}
84-
try {
85-
InputStreamReader reader = new InputStreamReader(in, "UTF-8");
86-
return doReadVersion(reader);
87-
} catch (UnsupportedEncodingException e) {
88-
return Version.unknownVersion();
89-
} finally {
90-
_close(in);
91-
}
74+
return packageVersionFor(cls);
9275
}
9376

9477
/**
@@ -109,38 +92,11 @@ public static Version packageVersionFor(Class<?> cls)
10992
} catch (Exception e) {
11093
throw new IllegalArgumentException("Failed to get Versioned out of "+vClass);
11194
}
112-
} catch (Exception e) { // ok to be missing (not good, acceptable)
95+
} catch (Exception e) { // ok to be missing (not good but acceptable)
11396
return null;
11497
}
11598
}
11699

117-
private static Version doReadVersion(final Reader r)
118-
{
119-
String version = null, group = null, artifact = null;
120-
121-
final BufferedReader br = new BufferedReader(r);
122-
try {
123-
version = br.readLine();
124-
if (version != null) {
125-
group = br.readLine();
126-
if (group != null) {
127-
artifact = br.readLine();
128-
}
129-
}
130-
} catch (IOException ignored) {
131-
} finally {
132-
_close(br);
133-
}
134-
// We don't trim() version: parseVersion() takes care ot that
135-
if (group != null) {
136-
group = group.trim();
137-
}
138-
if (artifact != null) {
139-
artifact = artifact.trim();
140-
}
141-
return parseVersion(version, group, artifact);
142-
}
143-
144100
/**
145101
* Will attempt to load the maven version for the given groupId and
146102
* artifactId. Maven puts a pom.properties file in
@@ -151,8 +107,12 @@ private static Version doReadVersion(final Reader r)
151107
* @param groupId the groupId of the library
152108
* @param artifactId the artifactId of the library
153109
* @return The version
110+
*
111+
* @deprecated Since 2.6: functionality not used by any official Jackson component, should be
112+
* moved out if anyone needs it
154113
*/
155114
@SuppressWarnings("resource")
115+
@Deprecated // since 2.6
156116
public static Version mavenVersionFor(ClassLoader cl, String groupId, String artifactId)
157117
{
158118
InputStream pomProperties = cl.getResourceAsStream("META-INF/maven/"
@@ -174,6 +134,9 @@ public static Version mavenVersionFor(ClassLoader cl, String groupId, String art
174134
return Version.unknownVersion();
175135
}
176136

137+
/**
138+
* Method used by {@link PackageVersion} to decode version injected by Maven build.
139+
*/
177140
public static Version parseVersion(String s, String groupId, String artifactId)
178141
{
179142
if (s != null && (s = s.trim()).length() > 0) {

src/test/java/com/fasterxml/jackson/core/filter/BasicGeneratorFilteringTest.java

Lines changed: 81 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.fasterxml.jackson.core.filter;
22

33
import java.io.*;
4+
import java.math.BigDecimal;
5+
import java.math.BigInteger;
46
import java.util.*;
57

68
import com.fasterxml.jackson.core.*;
@@ -128,16 +130,38 @@ public void testSingleMatchFilteringWithPath() throws Exception
128130
assertEquals(1, gen.getMatchCount());
129131
}
130132

133+
public void testSingleMatchFilteringWithPathSkippedArray() throws Exception
134+
{
135+
StringWriter w = new StringWriter();
136+
JsonGenerator origGen = JSON_F.createGenerator(w);
137+
NameMatchFilter filter = new NameMatchFilter("value");
138+
FilteringGeneratorDelegate gen = new FilteringGeneratorDelegate(origGen,
139+
filter,
140+
true, // includePath
141+
false // multipleMatches
142+
);
143+
144+
// Hmmh. Should we get access to eventual target?
145+
assertSame(w, gen.getOutputTarget());
146+
assertNotNull(gen.getFilterContext());
147+
assertSame(filter, gen.getFilter());
148+
149+
final String JSON = "{'array':[1,[2,3]],'ob':[{'value':'bar'}],'b':{'foo':[1,'foo']}}";
150+
writeJsonDoc(JSON_F, JSON, gen);
151+
assertEquals(aposToQuotes("{'ob':[{'value':'bar'}]}"), w.toString());
152+
assertEquals(1, gen.getMatchCount());
153+
}
154+
131155
// Alternative take, using slightly different calls for FIELD_NAME, START_ARRAY
132-
public void testSingleMatchFilteringWithPathAlternate() throws Exception
156+
public void testSingleMatchFilteringWithPathAlternate1() throws Exception
133157
{
134158
StringWriter w = new StringWriter();
135159
FilteringGeneratorDelegate gen = new FilteringGeneratorDelegate(JSON_F.createGenerator(w),
136160
new NameMatchFilter("value"),
137161
true, // includePath
138162
false // multipleMatches
139163
);
140-
//final String JSON = "{'a':123,'array':[1,2],'ob':{'value0':2,'value':3,'value2':'foo'},'b':true}";
164+
//final String JSON = "{'a':123,'array':[1,2],'ob':{'value0':2,'value':[3],'value2':'foo'},'b':true}";
141165

142166
gen.writeStartObject();
143167
gen.writeFieldName(new SerializedString("a"));
@@ -146,14 +170,16 @@ public void testSingleMatchFilteringWithPathAlternate() throws Exception
146170
gen.writeFieldName("array");
147171
gen.writeStartArray(2);
148172
gen.writeNumber("1");
149-
gen.writeNumber(2);
173+
gen.writeNumber((short) 2);
150174
gen.writeEndArray();
151175

152176
gen.writeFieldName(new SerializedString("ob"));
153177
gen.writeStartObject();
154178
gen.writeNumberField("value0", 2);
155179
gen.writeFieldName(new SerializedString("value"));
156-
gen.writeNumber(3); // just to vary generation method
180+
gen.writeStartArray(1);
181+
gen.writeString(new SerializedString("x")); // just to vary generation method
182+
gen.writeEndArray();
157183
gen.writeStringField("value2", "foo");
158184

159185
gen.writeEndObject();
@@ -163,7 +189,57 @@ public void testSingleMatchFilteringWithPathAlternate() throws Exception
163189
gen.writeEndObject();
164190
gen.close();
165191

166-
assertEquals(aposToQuotes("{'ob':{'value':3}}"), w.toString());
192+
assertEquals(aposToQuotes("{'ob':{'value':['x']}}"), w.toString());
193+
}
194+
195+
public void testSingleMatchFilteringWithPathRawBinary() throws Exception
196+
{
197+
StringWriter w = new StringWriter();
198+
FilteringGeneratorDelegate gen = new FilteringGeneratorDelegate(JSON_F.createGenerator(w),
199+
new NameMatchFilter("array"),
200+
true, // includePath
201+
false // multipleMatches
202+
);
203+
//final String JSON = "{'header':['ENCODED',raw],'array':['base64stuff',1,2,3,4,5,6.25,7.5],'extra':[1,2,3,4,5,6.25,7.5]}";
204+
205+
gen.writeStartObject();
206+
207+
gen.writeFieldName("header");
208+
gen.writeStartArray();
209+
gen.writeBinary(new byte[] { 1 });
210+
gen.writeRawValue(new SerializedString("1"));
211+
gen.writeRawValue("2");
212+
gen.writeEndArray();
213+
214+
gen.writeFieldName("array");
215+
216+
gen.writeStartArray();
217+
gen.writeBinary(new byte[] { 1 });
218+
gen.writeNumber((short) 1);
219+
gen.writeNumber((int) 2);
220+
gen.writeNumber((long) 3);
221+
gen.writeNumber(BigInteger.valueOf(4));
222+
gen.writeRaw(" ");
223+
gen.writeNumber(new BigDecimal("5.0"));
224+
gen.writeRaw(new SerializedString(" /*x*/"));
225+
gen.writeNumber(6.25f);
226+
gen.writeNumber(7.5);
227+
gen.writeEndArray();
228+
229+
gen.writeArrayFieldStart("extra");
230+
gen.writeNumber((short) 1);
231+
gen.writeNumber((int) 2);
232+
gen.writeNumber((long) 3);
233+
gen.writeNumber(BigInteger.valueOf(4));
234+
gen.writeNumber(new BigDecimal("5.0"));
235+
gen.writeNumber(6.25f);
236+
gen.writeNumber(7.5);
237+
gen.writeEndArray();
238+
239+
gen.writeEndObject();
240+
gen.close();
241+
242+
assertEquals(aposToQuotes("{'array':['AQ==',1,2,3,4 ,5.0 /*x*/,6.25,7.5]}"), w.toString());
167243
}
168244

169245
public void testMultipleMatchFilteringWithPath1() throws Exception
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.fasterxml.jackson.core.json;
2+
3+
import com.fasterxml.jackson.core.*;
4+
import com.fasterxml.jackson.core.util.JsonParserSequence;
5+
6+
public class ParserSequenceTest
7+
extends com.fasterxml.jackson.core.BaseTest
8+
{
9+
private final JsonFactory JSON_FACTORY = new JsonFactory();
10+
11+
public void testSimple() throws Exception
12+
{
13+
JsonParser p1 = JSON_FACTORY.createParser("[ 1 ]");
14+
JsonParser p2 = JSON_FACTORY.createParser("[ 2 ]");
15+
JsonParserSequence seq = JsonParserSequence.createFlattened(p1, p2);
16+
assertEquals(2, seq.containedParsersCount());
17+
18+
assertFalse(p1.isClosed());
19+
assertFalse(p2.isClosed());
20+
assertFalse(seq.isClosed());
21+
assertToken(JsonToken.START_ARRAY, seq.nextToken());
22+
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
23+
assertEquals(1, seq.getIntValue());
24+
assertToken(JsonToken.END_ARRAY, seq.nextToken());
25+
assertFalse(p1.isClosed());
26+
assertFalse(p2.isClosed());
27+
assertFalse(seq.isClosed());
28+
assertToken(JsonToken.START_ARRAY, seq.nextToken());
29+
30+
// first parser ought to be closed now
31+
assertTrue(p1.isClosed());
32+
assertFalse(p2.isClosed());
33+
assertFalse(seq.isClosed());
34+
35+
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
36+
assertEquals(2, seq.getIntValue());
37+
assertToken(JsonToken.END_ARRAY, seq.nextToken());
38+
assertTrue(p1.isClosed());
39+
assertFalse(p2.isClosed());
40+
assertFalse(seq.isClosed());
41+
42+
assertNull(seq.nextToken());
43+
assertTrue(p1.isClosed());
44+
assertTrue(p2.isClosed());
45+
assertTrue(seq.isClosed());
46+
47+
seq.close();
48+
// redundant, but call to remove IDE warnings
49+
p1.close();
50+
p2.close();
51+
}
52+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.fasterxml.jackson.core.type;
2+
3+
import java.util.List;
4+
5+
import com.fasterxml.jackson.core.BaseTest;
6+
7+
// Not much to test, but exercise to prevent code coverage tool from showing all red for package
8+
public class TypeReferenceTest extends BaseTest
9+
{
10+
public void testSimple()
11+
{
12+
TypeReference<?> ref = new TypeReference<List<String>>() { };
13+
assertNotNull(ref);
14+
ref.equals(null);
15+
}
16+
17+
@SuppressWarnings("rawtypes")
18+
public void testInvalid()
19+
{
20+
try {
21+
new TypeReference() { };
22+
fail("Should not pass!");
23+
} catch (IllegalArgumentException e) {
24+
verifyException(e, "without actual type information");
25+
}
26+
}
27+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.fasterxml.jackson.core.util;
2+
3+
import org.junit.Assert;
4+
5+
public class ByteArrayBuilderTest extends com.fasterxml.jackson.core.BaseTest
6+
{
7+
public void testSimple() throws Exception
8+
{
9+
ByteArrayBuilder b = new ByteArrayBuilder(null, 20);
10+
Assert.assertArrayEquals(new byte[0], b.toByteArray());
11+
12+
b.write((byte) 0);
13+
b.append(1);
14+
15+
byte[] foo = new byte[98];
16+
for (int i = 0; i < foo.length; ++i) {
17+
foo[i] = (byte) (2 + i);
18+
}
19+
b.write(foo);
20+
21+
byte[] result = b.toByteArray();
22+
assertEquals(100, result.length);
23+
for (int i = 0; i < 100; ++i) {
24+
assertEquals(i, (int) result[i]);
25+
}
26+
27+
b.release();
28+
b.close();
29+
}
30+
}

src/test/java/com/fasterxml/jackson/core/util/TestDefaultPrettyPrinter.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void testTabIndent() throws IOException
8484

8585
public void testRootSeparator() throws IOException
8686
{
87-
PrettyPrinter pp = new DefaultPrettyPrinter()
87+
DefaultPrettyPrinter pp = new DefaultPrettyPrinter()
8888
.withRootSeparator("|");
8989
final String EXP = "1|2|3";
9090

@@ -107,6 +107,27 @@ public void testRootSeparator() throws IOException
107107
gen.writeNumber(3);
108108
gen.close();
109109
assertEquals(EXP, bytes.toString("UTF-8"));
110+
111+
// Also: let's try removing separator altogether
112+
pp = pp.withRootSeparator((String) null)
113+
.withArrayIndenter(null)
114+
.withObjectIndenter(null)
115+
.withoutSpacesInObjectEntries();
116+
sw = new StringWriter();
117+
gen = JSON_F.createGenerator(sw);
118+
gen.setPrettyPrinter(pp);
119+
120+
gen.writeNumber(1);
121+
gen.writeStartArray();
122+
gen.writeNumber(2);
123+
gen.writeEndArray();
124+
gen.writeStartObject();
125+
gen.writeFieldName("a");
126+
gen.writeNumber(3);
127+
gen.writeEndObject();
128+
gen.close();
129+
// no root separator, nor array, object
130+
assertEquals("1[2]{\"a\":3}", sw.toString());
110131
}
111132

112133
private String _printTestData(PrettyPrinter pp, boolean useBytes) throws IOException

0 commit comments

Comments
 (0)