Package com.google.android.exoplayer2.testutil

## Class FakeDataSource

- java.lang.Object
- - com.google.android.exoplayer2.upstream.BaseDataSource
  - - com.google.android.exoplayer2.testutil.FakeDataSource

- All Implemented Interfaces:
    `DataReader`, `DataSource`

      public class FakeDataSource
      extends BaseDataSource

  A fake `DataSource` capable of simulating various scenarios. It uses a `FakeDataSet` instance which determines the response to data access calls.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `FakeDataSource.Factory` | Factory to create a `FakeDataSource`.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `FakeDataSource()` |
    `FakeDataSource​(FakeDataSet fakeDataSet)` |
    `FakeDataSource​(FakeDataSet fakeDataSet, boolean isNetwork)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | Closes the source.
    `DataSpec[]` | `getAndClearOpenedDataSpecs()` | Returns the `DataSpec` instances passed to `open(DataSpec)` since the last call to this method.
    `FakeDataSet` | `getDataSet()` |
    `Uri` | `getUri()` | When the source is open, returns the `Uri` from which data is being read.
    `boolean` | `isOpened()` | Returns whether the data source is currently opened.
    `protected void` | `onClosed()` | Called when the source is closed.
    `protected void` | `onDataRead​(int bytesRead)` | Called when data is being read.
    `long` | `open​(DataSpec dataSpec)` | Opens the source to read the specified data.
    `int` | `read​(byte[] buffer, int offset, int length)` | Reads up to `length` bytes of data from the input.

    - ### Methods inherited from class com.google.android.exoplayer2.upstream.BaseDataSource

      `addTransferListener, bytesTransferred, transferEnded, transferInitializing, transferStarted`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface com.google.android.exoplayer2.upstream.DataSource

      `getResponseHeaders`

- - ### Constructor Detail

    - #### FakeDataSource

          public FakeDataSource()

    - #### FakeDataSource

          public FakeDataSource​(FakeDataSet fakeDataSet)

    - #### FakeDataSource

          public FakeDataSource​(FakeDataSet fakeDataSet,
                                boolean isNetwork)

  - ### Method Detail

    - #### getDataSet

          public final FakeDataSet getDataSet()

    - #### open

          public final long open​(DataSpec dataSpec)
                          throws IOException

      Description copied from interface: `DataSource`
      Opens the source to read the specified data. If an `IOException` is thrown, callers must still call `DataSource.close()` to ensure that any partial effects of the invocation are cleaned up.

      The following edge case behaviors apply:

      - If the `requested position` is within the resource, but the `requested length` extends beyond the end of the resource, then `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` will succeed and data from the requested position to the end of the resource will be made available through `DataReader.read(byte[], int, int)`.
      - If the `requested position` is equal to the length of the resource, then `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` will succeed, and `DataReader.read(byte[], int, int)` will immediately return `C.RESULT_END_OF_INPUT`.
      - If the `requested position` is greater than the length of the resource, then `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` will throw an `IOException` for which `DataSourceException.isCausedByPositionOutOfRange(java.io.IOException)` will be `true`.
      Parameters:
        `dataSpec` - Defines the data to be read.
      Returns:
        The number of bytes that can be read from the opened source. For unbounded requests (i.e., requests where `DataSpec.length` equals `C.LENGTH_UNSET`) this value is the resolved length of the request, or `C.LENGTH_UNSET` if the length is still unresolved. For all other requests, the value returned will be equal to the request's `DataSpec.length`.
      Throws:
        `IOException` - If an error occurs opening the source. `DataSourceException` can be thrown or used as a cause of the thrown exception to specify the reason of the error.

    - #### read

          public final int read​(byte[] buffer,
                                int offset,
                                int length)
                         throws IOException

      Description copied from interface: `DataReader`
      Reads up to `length` bytes of data from the input.

      If `readLength` is zero then 0 is returned. Otherwise, if no data is available because the end of the opened range has been reached, then `C.RESULT_END_OF_INPUT` is returned. Otherwise, the call will block until at least one byte of data has been read and the number of bytes read is returned.

      Parameters:
        `buffer` - A target array into which data should be written.
        `offset` - The offset into the target array at which to write.
        `length` - The maximum number of bytes to read from the input.
      Returns:
        The number of bytes read, or `C.RESULT_END_OF_INPUT` if the input has ended. This may be less than `length` because the end of the input (or available data) was reached, the method was interrupted, or the operation was aborted early for another reason.
      Throws:
        `IOException` - If an error occurs reading from the input.

    - #### getUri

          @Nullable
          public final Uri getUri()

      Description copied from interface: `DataSource`
      When the source is open, returns the `Uri` from which data is being read. The returned `Uri` will be identical to the one passed `DataSource.open(DataSpec)` in the `DataSpec` unless redirection has occurred. If redirection has occurred, the `Uri` after redirection is returned.
      Returns:
        The `Uri` from which data is being read, or null if the source is not open.

    - #### close

          public final void close()

      Description copied from interface: `DataSource`
      Closes the source. This method must be called even if the corresponding call to `DataSource.open(DataSpec)` threw an `IOException`.

    - #### getAndClearOpenedDataSpecs

          public final DataSpec[] getAndClearOpenedDataSpecs()

      Returns the `DataSpec` instances passed to `open(DataSpec)` since the last call to this method.

    - #### isOpened

          public final boolean isOpened()

      Returns whether the data source is currently opened.

    - #### onDataRead

          protected void onDataRead​(int bytesRead)
                             throws IOException

      Called when data is being read.
      Throws:
        `IOException`

    - #### onClosed

          protected void onClosed()

      Called when the source is closed.