1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.base.test.util;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.File;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.FileInputStream;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.FileNotFoundException;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.FileOutputStream;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.IOException;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.InputStreamReader;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.OutputStreamWriter;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.Reader;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.Writer;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Arrays;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Utility class for dealing with files for test.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class TestFileUtil {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static void createNewHtmlFile(String name, String title, String body)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            throws IOException {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        File file = new File(name);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (!file.createNewFile()) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            throw new IOException("File \"" + name + "\" already exists");
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Writer writer = null;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            writer.write("<html><meta charset=\"UTF-8\" />" +
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         "<head><title>" + title + "</title></head>" +
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         "<body>" +
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         (body != null ? body : "") +
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         "</body>" +
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         "</html>");
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } finally {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (writer != null) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                writer.close();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static void deleteFile(String name) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        File file = new File(name);
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        boolean deleted = file.delete();
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        assert (deleted || !file.exists());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param fileName the file to read in.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param sizeLimit cap on the file size: will throw an exception if exceeded
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @return Array of chars read from the file
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @throws FileNotFoundException file does not exceed
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @throws IOException error encountered accessing the file
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static char[] readUtf8File(String fileName, int sizeLimit) throws
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            FileNotFoundException, IOException {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Reader reader = null;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            File f = new File(fileName);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (f.length() > sizeLimit) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                throw new IOException("File " + fileName + " length " + f.length() +
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        " exceeds limit " + sizeLimit);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            char[] buffer = new char[(int) f.length()];
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reader = new InputStreamReader(new FileInputStream(f), "UTF-8");
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            int charsRead = reader.read(buffer);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            // Debug check that we've exhausted the input stream (will fail e.g. if the
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            // file grew after we inspected its length).
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            assert !reader.ready();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return charsRead < buffer.length ? Arrays.copyOfRange(buffer, 0, charsRead) : buffer;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } finally {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (reader != null) reader.close();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
79