Support_AvailTest.java revision 8d8858e39800de641b50f6e8e864af9cf68bedea
1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package tests.support; 19 20import java.io.FileDescriptor; 21import java.io.FileInputStream; 22import java.io.FileOutputStream; 23import java.io.IOException; 24 25public class Support_AvailTest { 26 27 public static void main(String[] args) { 28 // This test is for: 29 30 // This program accepts from stdin a 31 // string of the form '<int1> <int2> <data>' 32 // where data is some bytes, <int1> is the length of the whole string 33 // and <int2> is the length in bytes of <data> (all bytes until the end 34 // of 35 // the input) 36 37 // If the string is formatted correctly, and the available method works 38 // the string "true" will be sent to stdout, otherwise "false" 39 String output = "true"; 40 try { 41 FileInputStream myin = new FileInputStream(FileDescriptor.in); 42 StringBuffer input = new StringBuffer(""); 43 44 try { 45 Thread.sleep(500); 46 } catch (Exception sleepException) { 47 } 48 49 int real = myin.available(); 50 int expected; 51 int c = 0; 52 while (true) { 53 c = myin.read(); 54 if (c == ' ' || c == -1) { 55 break; 56 } 57 input.append((char) c); 58 } 59 expected = Integer.parseInt(input.toString()); 60 // Verify correct value at start of read 61 if (real != expected) { 62 output = "Failed avail test1 - " + real + "!=" + expected; 63 } 64 65 c = 0; 66 input = new StringBuffer(""); 67 while (true) { 68 c = myin.read(); 69 if (c == ' ' || c == -1) { 70 break; 71 } 72 input.append((char) c); 73 } 74 expected = Integer.parseInt(input.toString()); 75 real = myin.available(); 76 // Verify value at middle of reading 77 // This test doesn't work on Windows, at present 78 // if(real != expected) output = "Failed avail test2 - " + real + 79 // "!=" + expected; 80 81 // Verify value at end of reading 82 // loop to EOF, then check if available = 0 83 // replace this: 84 for (int i = 0; i < 5; i++) { 85 myin.read(); 86 // with: 87 // while(myin.read() != -1); 88 } 89 90 // The current for loop reads exactly to the end 91 // of the data, but is dependent on knowing the length of the data 92 // sent to it, which isn't nice 93 94 expected = 0; 95 real = myin.available(); 96 if (real != 0) { 97 output = "Failed avail test3 - " + real + "!=" + expected; 98 } 99 100 } catch (IOException e) { 101 output = "IOException during available() testing"; 102 } 103 104 try { 105 FileOutputStream myout = new FileOutputStream(FileDescriptor.out); 106 myout.write(output.getBytes()); 107 } catch (IOException e) { 108 e.printStackTrace(); 109 } 110 } 111} 112