public RecordReader getRecordReader(InputSplit split, JobConf job,
    Reporter reporter) throws IOException {
    FileSplit fileSplit = (FileSplit) split;
    FileSystem fs = FileSystem.get(fileSplit.getPath().toUri(), job);
    FSDataInputStream is = fs.open(fileSplit.getPath());
    byte[] header = new byte[3];
    RecordReader reader = null;
    try {
      is.readFully(header);
    } catch (EOFException eof) {
      reader = textInputFormat.getRecordReader(split, job, reporter);
    } finally {
      is.close();
    }
    if (header[0] == 'S' && header[1] == 'E' && header[2] == 'Q') {
      reader = seqFileInputFormat.getRecordReader(split, job, reporter);
    } else {
      reader = textInputFormat.getRecordReader(split, job, reporter);
    }
    return reader;
  }
@SuppressWarnings( { "unchecked", "deprecation" })
  @Test
  public void testFormat() throws IOException {
    JobConf job = new JobConf(conf);
    FileSystem fs = FileSystem.getLocal(conf);
    Path dir = new Path(System.getProperty("test.build.data", ".") + "/mapred");
    Path txtFile = new Path(dir, "auto.txt");
    Path seqFile = new Path(dir, "auto.seq");

    fs.delete(dir, true);

    FileInputFormat.setInputPaths(job, dir);

    Writer txtWriter = new OutputStreamWriter(fs.create(txtFile));
    try {
      for (int i = 0; i < LINES_COUNT; i++) {
        txtWriter.write("" + (10 * i));
        txtWriter.write("\n");
      }
    } finally {
      txtWriter.close();
    }

    SequenceFile.Writer seqWriter = SequenceFile.createWriter(fs, conf,
      seqFile, IntWritable.class, LongWritable.class);
    try {
      for (int i = 0; i < RECORDS_COUNT; i++) {
        IntWritable key = new IntWritable(11 * i);
        LongWritable value = new LongWritable(12 * i);
        seqWriter.append(key, value);
      }
    } finally {
      seqWriter.close();
    }

    AutoInputFormat format = new AutoInputFormat();
    InputSplit[] splits = format.getSplits(job, SPLITS_COUNT);
    for (InputSplit split : splits) {
      RecordReader reader = format.getRecordReader(split, job, Reporter.NULL);
      Object key = reader.createKey();
      Object value = reader.createValue();
      try {
        while (reader.next(key, value)) {
          if (key instanceof LongWritable) {
            assertEquals("Wrong value class.", Text.class, value.getClass());
            assertTrue("Invalid value", Integer.parseInt(((Text) value)
              .toString()) % 10 == 0);
          } else {
            assertEquals("Wrong key class.", IntWritable.class, key.getClass());
            assertEquals("Wrong value class.", LongWritable.class, value
              .getClass());
            assertTrue("Invalid key.", ((IntWritable) key).get() % 11 == 0);
            assertTrue("Invalid value.", ((LongWritable) value).get() % 12 == 0);
          }
        }
      } finally {
        reader.close();
      }
    }
  }