View Javadoc

1   /**
2    * Copyright (c) 2008-2012, 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  package org.yaml.snakeyaml.issues.issue111;
17  
18  import java.io.StringReader;
19  
20  import junit.framework.TestCase;
21  
22  import org.yaml.snakeyaml.Yaml;
23  import org.yaml.snakeyaml.nodes.Node;
24  import org.yaml.snakeyaml.nodes.ScalarNode;
25  
26  public class LongUriTest extends TestCase {
27      /**
28       * Try loading a tag with a very long escaped URI section (over 256 bytes'
29       * worth).
30       */
31      public void testLongURIEscape() {
32          Yaml loader = new Yaml();
33          // Create a long escaped string by exponential growth...
34          String longEscURI = "%41"; // capital A...
35          for (int i = 0; i < 10; ++i) {
36              longEscURI = longEscURI + longEscURI;
37          }
38          assertEquals(1024 * 3, longEscURI.length());
39          String yaml = "!" + longEscURI + " www";
40  
41          Node node = loader.compose(new StringReader(yaml));
42          ScalarNode scalar = (ScalarNode) node;
43          String etalon = "!";
44          for (int i = 0; i < 1024; i++) {
45              etalon += "A";
46          }
47          assertEquals(1025, etalon.length());
48          assertEquals(etalon, scalar.getTag().toString());
49      }
50  }