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