@@ -327,3 +327,31 @@ TEST(RField, StreamerSchemaEvolution)
327
327
reader->LoadEntry (0 );
328
328
EXPECT_EQ (137 , ptrF->fValue );
329
329
}
330
+
331
+ TEST (RField, StreamerClassMismatch)
332
+ {
333
+ FileRaii fileGuard (" test_ntuple_rfield_streamer_class_mismatch.root" );
334
+ {
335
+ auto model = RNTupleModel::Create ();
336
+ model->AddField (RFieldBase::Create (" f" , " TemperatureCelsius" ).Unwrap ());
337
+ auto writer = RNTupleWriter::Recreate (std::move (model), " ntpl" , fileGuard.GetPath ());
338
+ auto ptrF = writer->GetModel ().GetDefaultEntry ().GetPtr <TemperatureCelsius>(" f" );
339
+ ptrF->fValue = 100 .;
340
+ writer->Fill ();
341
+ }
342
+
343
+ auto model = RNTupleModel::Create ();
344
+ model->AddField (RFieldBase::Create (" f" , " TemperatureKelvin" ).Unwrap ());
345
+ auto reader = RNTupleReader::Open (std::move (model), " ntpl" , fileGuard.GetPath ());
346
+
347
+ ASSERT_EQ (1U , reader->GetNEntries ());
348
+ auto ptrF = reader->GetModel ().GetDefaultEntry ().GetPtr <TemperatureKelvin>(" f" );
349
+
350
+ // TODO(jblomer): this should fail with an exception when we connect the page source
351
+ ROOT::TestSupport::CheckDiagsRAII diagRAII;
352
+ diagRAII.requiredDiag (kError , " TBufferFile::ReadVersion" , " Could not find the StreamerInfo with a checksum of" ,
353
+ false /* matchFullMessage */ );
354
+ diagRAII.requiredDiag (kError , " TBufferFile::CheckByteCount" , " object of class TemperatureKelvin read too few bytes" ,
355
+ false /* matchFullMessage */ );
356
+ reader->LoadEntry (0 );
357
+ }
0 commit comments