Issue 29: Deprecate DumperOptions.calculateScalarStyle()
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 15b70c2..6bbffc3 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,6 +7,11 @@
</properties>
<body>
<release version="1.10-SNAPSHOT" date="in Mercurial" description="Development">
+ <action dev="py4fun" type="remove">
+ Deprecate the DumperOptions.calculateScalarStyle() method because it was introduced as a quick
+ fix for issue 29. Now it should not be required at all (because of the fix for issue 66),
+ or it should be implemented in the Representer (in RepresentString) (2011-10-10)
+ </action>
<action dev="py4fun" type="fix">
Fix issue 66: literal scalar style is used by default for multiline scalars (2011-10-10)
</action>
diff --git a/src/main/java/org/yaml/snakeyaml/DumperOptions.java b/src/main/java/org/yaml/snakeyaml/DumperOptions.java
index 80ec8b1..cf58485 100644
--- a/src/main/java/org/yaml/snakeyaml/DumperOptions.java
+++ b/src/main/java/org/yaml/snakeyaml/DumperOptions.java
@@ -363,6 +363,7 @@
* @param style
* - automatically detected style
* @return ScalarStyle to be used for scalar
+ * @deprecated it was implemented as a quick fix for issue 29
*/
public ScalarStyle calculateScalarStyle(ScalarAnalysis analysis, ScalarStyle style) {
return style;
diff --git a/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java b/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java
index c9c5876..779e27e 100644
--- a/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java
+++ b/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java
@@ -781,6 +781,7 @@
return '"';
}
+ @SuppressWarnings("deprecation")
private void processScalar() throws IOException {
ScalarEvent ev = (ScalarEvent) event;
if (analysis == null) {
@@ -789,6 +790,7 @@
if (style == null) {
style = chooseScalarStyle();
}
+ // TODO the next line should be removed
style = options.calculateScalarStyle(analysis, ScalarStyle.createStyle(style)).getChar();
boolean split = !simpleKeyContext;
if (style == null) {
diff --git a/src/main/java/org/yaml/snakeyaml/representer/BaseRepresenter.java b/src/main/java/org/yaml/snakeyaml/representer/BaseRepresenter.java
index d4d7602..dd74185 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/BaseRepresenter.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/BaseRepresenter.java
@@ -118,7 +118,6 @@
style = this.defaultScalarStyle;
}
Node node = new ScalarNode(tag, value, null, null, style);
- // representedObjects.put(objectToRepresent, node);
return node;
}
diff --git a/src/test/java/org/yaml/snakeyaml/emitter/EmitterMultiLineTest.java b/src/test/java/org/yaml/snakeyaml/emitter/EmitterMultiLineTest.java
index dbe4504..0fe238c 100644
--- a/src/test/java/org/yaml/snakeyaml/emitter/EmitterMultiLineTest.java
+++ b/src/test/java/org/yaml/snakeyaml/emitter/EmitterMultiLineTest.java
@@ -28,7 +28,7 @@
public class EmitterMultiLineTest extends TestCase {
- public void testWriteMultiLinePlain() {
+ public void testWriteMultiLineLiteral() {
String plain = "mama\nmila\nramu";
Yaml yaml = new Yaml();
String output = yaml.dump(plain);
@@ -39,7 +39,7 @@
assertEquals(plain, parsed);
}
- public void testWriteMultiLinePlainList() {
+ public void testWriteMultiLineList() {
String one = "first\nsecond\nthird";
String two = "one\ntwo\nthree\n";
byte[] binary = { 8, 14, 15, 10, 126, 32, 65, 65, 65 };
@@ -51,7 +51,7 @@
options.setDefaultFlowStyle(FlowStyle.BLOCK);
Yaml yaml = new Yaml(options);
String output = yaml.dump(list);
- System.out.println(output);
+ // System.out.println(output);
String etalon = "- |-\n first\n second\n third\n- |\n one\n two\n three\n- !!binary |-\n CA4PCn4gQUFB\n";
assertEquals(etalon, output);
@SuppressWarnings("unchecked")
@@ -62,7 +62,7 @@
assertEquals(new String(binary), new String((byte[]) parsed.get(2)));
}
- public void testWriteMultiLineLiteralNoChomping() {
+ public void testWriteMultiLineLiteralWithClipChomping() {
String source = "a: 1\nb: |\n mama\n mila\n ramu\n";
// System.out.println("Source:\n" + source);
Yaml yaml = new Yaml();
@@ -76,7 +76,7 @@
assertEquals("a: 1\nb: |\n mama\n mila\n ramu\n", dumped);
}
- public void testWriteMultiLineSingleQuotedInFlowContext() {
+ public void testWriteMultiLineQuotedInFlowContext() {
String source = "{a: 1, b: 'mama\n\n mila\n\n ramu'}\n";
// System.out.println("Source:\n" + source);
DumperOptions options = new DumperOptions();
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue29/FlexibleScalarStyleTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue29/FlexibleScalarStyleTest.java
index 92c9013..df25c3d 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue29/FlexibleScalarStyleTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue29/FlexibleScalarStyleTest.java
@@ -16,42 +16,90 @@
package org.yaml.snakeyaml.issues.issue29;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
import junit.framework.TestCase;
import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.DumperOptions.ScalarStyle;
+import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.emitter.ScalarAnalysis;
+import org.yaml.snakeyaml.nodes.Node;
+import org.yaml.snakeyaml.nodes.ScalarNode;
+import org.yaml.snakeyaml.representer.Representer;
/**
* to test http://code.google.com/p/snakeyaml/issues/detail?id=29
*/
public class FlexibleScalarStyleTest extends TestCase {
public void testLong() {
- Yaml yaml = new Yaml(new MyOptions());
+ DumperOptions options = new DumperOptions();
+ options.setDefaultScalarStyle(ScalarStyle.FOLDED);
+ Yaml yaml = new Yaml(options);
String result = yaml
.dump("qqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqq "
+ "qqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqq "
- + "qqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqq\n "
+ + "qqqqqqqqqqqqqqqqqqqqqqqqq 111111111111111111111111\n "
+ "qqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqq\n");
// System.out.println(result);
assertTrue(result.startsWith(">\n"));
+ assertEquals(
+ ">\n qqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqq\n qqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqq 111111111111111111111111\n qqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqq\n",
+ result);
}
- public void testShort() {
- Yaml yaml = new Yaml(new MyOptions());
- String result = yaml.dump("qqqqqqqqqqqqqqqqqq");
- // System.out.println(result);
- assertEquals("qqqqqqqqqqqqqqqqqq\n", result);
+ public void testNoFoldedScalar() {
+ DumperOptions options = new DumperOptions();
+ options.setWidth(30);
+ Yaml yaml = new Yaml(options);
+ String output = yaml.dump(getData());
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("representer/scalar-style1.yaml");
+ assertEquals(etalon, output);
}
- private class MyOptions extends DumperOptions {
- @Override
- public DumperOptions.ScalarStyle calculateScalarStyle(ScalarAnalysis analysis,
- DumperOptions.ScalarStyle style) {
- if (analysis.allowBlock && analysis.scalar.length() > 80) {
- return ScalarStyle.FOLDED;
- } else {
- return super.calculateScalarStyle(analysis, style);
+ public void testCustomScalarStyle() {
+ DumperOptions options = new DumperOptions();
+ options.setWidth(30);
+ Yaml yaml = new Yaml(new MyRepresenter(), options);
+ String output = yaml.dump(getData());
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("representer/scalar-style2.yaml");
+ assertEquals(etalon, output);
+ }
+
+ private Map<String, String> getData() {
+ Map<String, String> map = new LinkedHashMap<String, String>();
+ map.put("name", "Steve Jobs");
+ map.put("address", "Name\nStreet Number\nCountry");
+ map.put("description",
+ "1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 0000000000");
+ return map;
+ }
+
+ private class MyRepresenter extends Representer {
+
+ public MyRepresenter() {
+ super();
+ this.representers.put(String.class, new FlexibleRepresent());
+ }
+
+ private class FlexibleRepresent extends RepresentString {
+ public Node representData(Object data) {
+ ScalarNode node = (ScalarNode) super.representData(data);
+ if (node.getStyle() == null) {
+ // if Plain scalar style
+ if (node.getValue().length() < 25) {
+ return node;
+ } else {
+ // Folded scalar style
+ return new ScalarNode(node.getTag(), node.getValue(), node.getStartMark(),
+ node.getEndMark(), '>');
+ }
+ } else {
+ return node;
+ }
}
}
}
diff --git a/src/test/java/org/yaml/snakeyaml/representer/DumpStackTraceTest.java b/src/test/java/org/yaml/snakeyaml/representer/DumpStackTraceTest.java
index 34b51e7..d730e12 100644
--- a/src/test/java/org/yaml/snakeyaml/representer/DumpStackTraceTest.java
+++ b/src/test/java/org/yaml/snakeyaml/representer/DumpStackTraceTest.java
@@ -60,7 +60,7 @@
String result = (String) yaml.dump(input);
// System.out.println(result);
String etalon = Util.getLocalResource("representer/stacktrace1.yaml");
- // http://code.google.com/p/snakeyaml/issues/detail?id=66)
+ // http://code.google.com/p/snakeyaml/issues/detail?id=66
assertEquals(etalon, result);
}
}
diff --git a/src/test/resources/representer/scalar-style1.yaml b/src/test/resources/representer/scalar-style1.yaml
new file mode 100644
index 0000000..aece58d
--- /dev/null
+++ b/src/test/resources/representer/scalar-style1.yaml
@@ -0,0 +1,6 @@
+name: Steve Jobs
+address: |-
+ Name
+ Street Number
+ Country
+description: 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 0000000000
diff --git a/src/test/resources/representer/scalar-style2.yaml b/src/test/resources/representer/scalar-style2.yaml
new file mode 100644
index 0000000..e4228d3
--- /dev/null
+++ b/src/test/resources/representer/scalar-style2.yaml
@@ -0,0 +1,10 @@
+name: Steve Jobs
+address: |-
+ Name
+ Street Number
+ Country
+description: >-
+ 1111111111 2222222222 3333333333
+ 4444444444 5555555555 6666666666
+ 7777777777 8888888888 9999999999
+ 0000000000