From 57c09c9e9b7376ba2105df82991977aca96b4f8b Mon Sep 17 00:00:00 2001
From: Florine de Geus <florine.willemijn.de.geus@cern.ch>
Date: Mon, 13 Mar 2023 14:42:11 +0100
Subject: [PATCH] [ntuple] Add unit test for TChain

---
 tree/ntupleutil/v7/test/ntuple_importer.cxx | 40 +++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/tree/ntupleutil/v7/test/ntuple_importer.cxx b/tree/ntupleutil/v7/test/ntuple_importer.cxx
index f77f08f0c87..0610c0bb665 100644
--- a/tree/ntupleutil/v7/test/ntuple_importer.cxx
+++ b/tree/ntupleutil/v7/test/ntuple_importer.cxx
@@ -2,6 +2,7 @@
 
 #include <TFile.h>
 #include <TTree.h>
+#include <TChain.h>
 
 #include <cstdio>
 #include <string>
@@ -56,6 +57,45 @@ TEST(RNTupleImporter, CreateFromTree)
    EXPECT_THROW(importer->Import(), ROOT::Experimental::RException);
 }
 
+TEST(RNTupleImporter, CreateFromChain)
+{
+   FileRaii fileGuard1("test_ntuple_create_from_chain_1.root");
+   {
+      std::unique_ptr<TFile> file(TFile::Open(fileGuard1.GetPath().c_str(), "RECREATE"));
+      auto tree = std::make_unique<TTree>("tree", "");
+      Int_t a = 42;
+      // For single-leaf branches, use branch name, not leaf name
+      tree->Branch("a", &a);
+      tree->Fill();
+      tree->Write();
+   }
+
+   FileRaii fileGuard2("test_ntuple_create_from_chain_2.root");
+   {
+      std::unique_ptr<TFile> file(TFile::Open(fileGuard2.GetPath().c_str(), "RECREATE"));
+      auto tree = std::make_unique<TTree>("tree", "");
+      Int_t a = 43;
+      // For single-leaf branches, use branch name, not leaf name
+      tree->Branch("a", &a);
+      tree->Fill();
+      tree->Write();
+   }
+
+   TChain *chain = new TChain("tree");
+   chain->Add(fileGuard1.GetPath().c_str());
+   chain->Add(fileGuard2.GetPath().c_str());
+
+   auto importer = RNTupleImporter::Create(chain, fileGuard1.GetPath()).Unwrap();
+   importer->SetIsQuiet(true);
+   EXPECT_THROW(importer->Import(), ROOT::Experimental::RException);
+   importer->SetNTupleName("ntuple");
+   importer->Import();
+
+   auto reader = RNTupleReader::Open("ntuple", fileGuard1.GetPath());
+   EXPECT_EQ(2U, reader->GetNEntries());
+   EXPECT_THROW(importer->Import(), ROOT::Experimental::RException);
+}
+
 TEST(RNTupleImporter, Simple)
 {
    FileRaii fileGuard("test_ntuple_importer_simple.root");
-- 
GitLab