View Javadoc

1   /**
2    * Copyright (c) 2008-2011, http://www.snakeyaml.org
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.yaml.snakeyaml.issues.issue111;
18  
19  import java.io.StringReader;
20  
21  import junit.framework.TestCase;
22  
23  import org.yaml.snakeyaml.Yaml;
24  import org.yaml.snakeyaml.nodes.Node;
25  import org.yaml.snakeyaml.nodes.ScalarNode;
26  
27  public class LongUriTest extends TestCase {
28      /**
29       * Try loading a tag with a very long escaped URI section (over 256 bytes'
30       * worth).
31       */
32      public void testLongURIEscape() {
33          Yaml loader = new Yaml();
34          // Create a long escaped string by exponential growth...
35          String longEscURI = "%41"; // capital A...
36          for (int i = 0; i < 10; ++i) {
37              longEscURI = longEscURI + longEscURI;
38          }
39          assertEquals(1024 * 3, longEscURI.length());
40          String yaml = "!" + longEscURI + " www";
41  
42          Node node = loader.compose(new StringReader(yaml));
43          ScalarNode scalar = (ScalarNode) node;
44          String etalon = "!";
45          for (int i = 0; i < 1024; i++) {
46              etalon += "A";
47          }
48          assertEquals(1025, etalon.length());
49          assertEquals(etalon, scalar.getTag().toString());
50      }
51  }