testfilesystem.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 358 行

JAVA
358
字号
/* *   * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.io.j2me.storage;import java.io.*;import javax.microedition.io.*;import com.sun.midp.i3test.*;import com.sun.midp.configurator.Constants;/** * Unit test for File.java. */public class TestFileSystem extends TestCase {    final static String EMPTY_STR = "";    final static String TEST_FILE_A = File.getStorageRoot(Constants.INTERNAL_STORAGE_ID) + "A";    final static String TEST_FILE_B = File.getStorageRoot(Constants.INTERNAL_STORAGE_ID) + "B";        File fs;    RandomAccessStream ras;    void setUp() {	fs = new File();	ras = new RandomAccessStream();    }      /*     * - Check storage root for null     * - Create a file "A" under the root and write to it     */    public void testGetStorageRoot() {	// Storage root should not be null        assertTrue("getStorageRoot == null", File.getStorageRoot(Constants.INTERNAL_STORAGE_ID) != null);	// Storage root should be writable        try {            createTestFile(TEST_FILE_A, 1024);	    assertTrue(TEST_FILE_A + " exists", fs.exists(TEST_FILE_A));	    // Leave "A" on FS, so a later test can use it        } catch (IOException ioe) {            fail("Could not create a file in storage root");        }    }    /*     * - Check config root for null     */    public void testGetConfigRoot() {        assertTrue("getConfigRoot != null", File.getConfigRoot(Constants.INTERNAL_STORAGE_ID) != null);    }      /*     * - a-z, 0-9 unchanged, convert back unchanged     * - A-Z convert to #A-#Z, convert back correctly     * - 0-1, 9+1, a-1, z+1, A-1, Z+1, 0xFFFF to not be unchanged,     *   convert back correctly     * - empty string unchanged, convert back unchanged     * - 0x100 convert to "%0100", convert back correctly     */    public void testUnicodeToAsciiFilenameAndReverse() {        String unicode;        String ascii;        String result;        char[] buf = new char[1];        for (char c = 'a'; c <= 'z'; c++) {            buf[0] = c;            unicode = new String(buf);            ascii = File.unicodeToAsciiFilename(unicode);            assertEquals(unicode, ascii);            result = File.asciiFilenameToUnicode(ascii);            assertEquals(unicode, result);        }        for (char c = '0'; c <= '9'; c++) {            buf[0] = c;            unicode = new String(buf);            ascii = File.unicodeToAsciiFilename(unicode);            assertEquals(unicode, ascii);            result = File.asciiFilenameToUnicode(ascii);            assertEquals(unicode, result);        }        for (char c = 'A'; c <= 'Z'; c++) {            buf[0] = c;            unicode = new String(buf);            ascii = File.unicodeToAsciiFilename(unicode);            assertEquals('#', ascii.charAt(0));            assertEquals(c, ascii.charAt(1));            result = File.asciiFilenameToUnicode(ascii);            assertEquals(unicode, result);        }        unicode = EMPTY_STR;        ascii = File.unicodeToAsciiFilename(unicode);        assertEquals(unicode, ascii);        buf[0] = 'a' - 1;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = 'z' + 1;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = '0' - 1;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = '9' + 1;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = 'A' - 1;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = 'Z' + 1;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = 0xFFFF;        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertNotEquals(unicode, ascii);        buf[0] = 0x100;        result = "%0100";        unicode = new String(buf);        ascii = File.unicodeToAsciiFilename(unicode);        assertEquals(result, ascii);        result = File.asciiFilenameToUnicode(ascii);        assertEquals(unicode, result);    }         /*     * - Delete "B" just in case it then     *   rename file "A" to "B" and     *   check exists("B") and check non-exists("A")     * - rename file "B" to EMPTY name     *   and expects a IOException     */    public void testRename() {	// Make sure B does not exist        try {            fs.delete(TEST_FILE_B);        } catch (IOException e) {            // This will happen most of the time since "B" should not exist        }	// Rename A to B	try {	    fs.rename(TEST_FILE_A, TEST_FILE_B);	    assertTrue("A does not exist", !fs.exists(TEST_FILE_A));	    assertTrue("B does exist",      fs.exists(TEST_FILE_B));        	    try {		fs.rename(TEST_FILE_B, EMPTY_STR);		fail("rename to empty string");	    } catch (IOException ioe) {		assertTrue(true);	    }	} catch (Throwable t) {	    fail("Exception when renaming: ");	    t.printStackTrace();	    // Clean-up by deleting A	    try {		fs.delete(TEST_FILE_A);	    } catch (IOException ioe) {		// ignore	    }	}    }    /**     * Asserts that two objects are equal according to the equals() method.     *     * @param message the message to be emitted if the assertion fails     * @param expected an object containing the expected value     * @param actual an object containing the actual value     */    public void assertNotEquals(Object expected, Object actual) {	if (expected != actual) {            if (!expected.equals(actual)) {                return;            }            fail("expected NOT equals actual");	    return;        }    }    /**     * exists(EMPTY) return false.     */    void testExists() {	assertTrue(!fs.exists(EMPTY_STR));    }    /**     * - delete("B") and check for non-exists("B")     * - delete("DontExist") expects IOException     * - delete(EMPTY) expects IllegalArgumentException     */    void testDelete() {	try {	    // Create B first	    createTestFile(TEST_FILE_B, 1024);	    // Delete	    fs.delete(TEST_FILE_B);	    // Test for existence	    assertTrue(fs.exists(TEST_FILE_B) == false);	} catch (Throwable t) {	    fail("Unexpected Exception while deleting:");	    t.printStackTrace();	}	// Delete a non-existing file	boolean ioeThrowed = false;	try {	    fs.delete("DontExist");	} catch (IOException ioe) {	    ioeThrowed = true;	}	assertTrue(ioeThrowed);    }    /**     * - Call and store the size as initialSpace, expect > 0     * - Create a file "A" and write 1KB data, and call size again     *   as lessSpace     *   expect: 0 < diff - 1KB < 512B     * - Delete file "A" and call size again as moreSpace         expect moreSpace - lessSpace > 1KB         expect abs(moreSpace - lessSpace) < 512B     * - Repeat from step 2 for 50 times     */    void testAvailable() {	int SIZE = 2048; // bytes	int OVERHEAD = 512; // bytes	long initialSpace = fs.getBytesAvailableForFiles(Constants.INTERNAL_STORAGE_ID);	assertTrue("initialSpace="+initialSpace, initialSpace > 0);	try {	    // Loop many times to ensure no space leak	    for (int i = 0; i < 50; i++) {		// Create a file with certain size		// expect overhead be less than allowed number 		createTestFile(TEST_FILE_A, SIZE);		long lessSpace = fs.getBytesAvailableForFiles(Constants.INTERNAL_STORAGE_ID);				long delta = initialSpace - lessSpace;				assertTrue("space used="+delta, delta >= SIZE);		assertTrue("create overhead="+(delta - SIZE),			   delta < SIZE + OVERHEAD);	     		// expect delete a file will give back some space		// expect less than overhead bytes will be kept		fs.delete(TEST_FILE_A);		long moreSpace = fs.getBytesAvailableForFiles(Constants.INTERNAL_STORAGE_ID);		delta = moreSpace - lessSpace;		assertTrue("freeup space="+delta, delta >= SIZE);		if (moreSpace < initialSpace) {		    assertTrue("delete overhead="+(initialSpace - moreSpace),			       initialSpace - moreSpace < OVERHEAD);		} else {		    assertTrue("delete overhead="+(moreSpace - initialSpace),				moreSpace - initialSpace < OVERHEAD);		}	    }	} catch (IOException ioe) {	    ioe.printStackTrace();	}    }    void tearDown() {    }    void createTestFile(String name, int size) throws IOException {	ras.connect(name, Connector.WRITE);	ras.writeBytes(new byte[size], 0, size);        ras.commitWrite();	ras.disconnect();    }    public void runTests() {	setUp();        declare("testGetStorageRoot");        testGetStorageRoot();        declare("testGetConfigRoot");        testGetConfigRoot();        declare("testUnicodeToAsciiFilenameAndReverse");        testUnicodeToAsciiFilenameAndReverse();        declare("testRename");        testRename();        declare("testExists");	testExists();	declare("testDelete");	testDelete();	declare("testGetBytesAvailableForFiles");	testAvailable();	tearDown();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?