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 + -
显示快捷键?