public Collection<TestableMRP> read(InputStream in) throws Exception {
   ArrayList<TestableMRP> tests = new ArrayList<TestableMRP>();
   //
   reader = new CsvListReader(new InputStreamReader(in), CsvPreference.STANDARD_PREFERENCE);
   String[] header = reader.getCSVHeader(true);
   System.out.println("HEADER: " + MRPUtil.toString(header));
   //
   List<String> line;
   int last_lineNo = -1;
   boolean isPlanningLine = true;
   TestableMRP mrpTest = null;
   try {
     while ((line = reader.read()) != null) {
       if (last_lineNo == -1 || last_lineNo + 1 < reader.getLineNumber()) {
         isPlanningLine = true;
         if (mrpTest != null) {
           tests.add(mrpTest);
         }
         mrpTest = new TestableMRP();
       }
       if (isPlanningLine) {
         readProductPlanning(mrpTest, header, line);
         isPlanningLine = false;
       } else {
         readMRPLine(mrpTest, header, line);
       }
       //
       last_lineNo = reader.getLineNumber();
     }
   } catch (Exception e) {
     throw new RuntimeException(
         "Error on line " + reader.getLineNumber() + ": " + e.getLocalizedMessage(), e);
   }
   if (mrpTest != null) {
     tests.add(mrpTest);
   }
   //
   return tests;
 }