Home | History | Annotate | Download | only in pyyaml
      1 /**
      2  * Copyright (c) 2008, 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.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 }
    136