1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.pyyaml;
17
18 import java.io.File;
19 import java.io.FilenameFilter;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import junit.framework.TestCase;
26
27 import org.yaml.snakeyaml.Util;
28 import org.yaml.snakeyaml.Yaml;
29 import org.yaml.snakeyaml.constructor.Constructor;
30 import org.yaml.snakeyaml.events.Event;
31 import org.yaml.snakeyaml.parser.Parser;
32 import org.yaml.snakeyaml.parser.ParserImpl;
33 import org.yaml.snakeyaml.reader.StreamReader;
34 import org.yaml.snakeyaml.reader.UnicodeReader;
35
36 public abstract class PyImportTest extends TestCase {
37 public static final String PATH = "pyyaml";
38
39 protected Object load(String data) {
40 Yaml yaml = new Yaml();
41 return yaml.load(data);
42 }
43
44 protected Object load(Constructor loader, String data) {
45 Yaml yaml = new Yaml(loader);
46 return yaml.load(data);
47 }
48
49 protected Iterable<Object> loadAll(InputStream data) {
50 Yaml yaml = new Yaml();
51 return yaml.loadAll(data);
52 }
53
54 protected Iterable<Object> loadAll(String data) {
55 Yaml yaml = new Yaml();
56 return yaml.loadAll(data);
57 }
58
59 protected Iterable<Object> loadAll(Constructor loader, String data) {
60 Yaml yaml = new Yaml(loader);
61 return yaml.loadAll(data);
62 }
63
64 protected String getResource(String theName) {
65 String content;
66 content = Util.getLocalResource(PATH + File.separator + theName);
67 return content;
68 }
69
70 protected File[] getStreamsByExtension(String extention) {
71 return getStreamsByExtension(extention, false);
72 }
73
74 protected File[] getStreamsByExtension(String extention, boolean onlyIfCanonicalPresent) {
75 File file = new File("src/test/resources/pyyaml");
76 assertTrue("Folder not found: " + file.getAbsolutePath(), file.exists());
77 assertTrue(file.isDirectory());
78 return file.listFiles(new PyFilenameFilter(extention, onlyIfCanonicalPresent));
79 }
80
81 protected File getFileByName(String name) {
82 File file = new File("src/test/resources/pyyaml/" + name);
83 assertTrue("Folder not found: " + file.getAbsolutePath(), file.exists());
84 assertTrue(file.isFile());
85 return file;
86 }
87
88 protected List<Event> canonicalParse(InputStream input2) throws IOException {
89 StreamReader reader = new StreamReader(new UnicodeReader(input2));
90 StringBuilder buffer = new StringBuilder();
91 while (reader.peek() != '\0') {
92 buffer.append(reader.peek());
93 reader.forward();
94 }
95 CanonicalParser parser = new CanonicalParser(buffer.toString());
96 List<Event> result = new ArrayList<Event>();
97 while (parser.peekEvent() != null) {
98 result.add(parser.getEvent());
99 }
100 input2.close();
101 return result;
102 }
103
104 protected List<Event> parse(InputStream input) throws IOException {
105 StreamReader reader = new StreamReader(new UnicodeReader(input));
106 Parser parser = new ParserImpl(reader);
107 List<Event> result = new ArrayList<Event>();
108 while (parser.peekEvent() != null) {
109 result.add(parser.getEvent());
110 }
111 input.close();
112 return result;
113 }
114
115 private class PyFilenameFilter implements FilenameFilter {
116 private String extension;
117 private boolean onlyIfCanonicalPresent;
118
119 public PyFilenameFilter(String extension, boolean onlyIfCanonicalPresent) {
120 this.extension = extension;
121 this.onlyIfCanonicalPresent = onlyIfCanonicalPresent;
122 }
123
124 public boolean accept(File dir, String name) {
125 int position = name.lastIndexOf('.');
126 String canonicalFileName = name.substring(0, position) + ".canonical";
127 File canonicalFile = new File(dir, canonicalFileName);
128 if (onlyIfCanonicalPresent && !canonicalFile.exists()) {
129 return false;
130 } else {
131 return name.endsWith(extension);
132 }
133 }
134 }
135 }