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