1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.org.xml.sax.support;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Implements an InputStream what wraps another InputStream and throws an
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IOException after having read a specified number of bytes. Used for
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * injecting IOExceptions on lower levels.
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class BrokenInputStream extends InputStream {
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private InputStream stream;
30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private int offset;
32f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public BrokenInputStream(InputStream stream, int offset) {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super();
35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.stream = stream;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.offset = offset;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int read() throws IOException {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (offset == 0) {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IOException("Injected exception");
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        offset--;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return stream.read();
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
50086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson    @Override
51086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson    public void close() throws IOException {
52086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson        stream.close();
53086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson    }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}