@@ -2926,6 +2926,64 @@ static void include9()
29262926 ASSERT_EQUALS (" \n #line 2 \" 1.h\"\n x = 1 ;" , out.stringify ());
29272927}
29282928
2929+ static void include10 () // #669 - -include with load()
2930+ {
2931+ const char code_c[] = " X\n " ;
2932+ const char code_h[] = " #define X 123\n " ;
2933+
2934+ std::vector<std::string> files;
2935+
2936+ const simplecpp::TokenList rawtokens_c = makeTokenList (code_c, files, " src.c" );
2937+ const simplecpp::TokenList rawtokens_h = makeTokenList (code_h, files, " inc.h" );
2938+
2939+ ASSERT_EQUALS (2U , files.size ());
2940+ ASSERT_EQUALS (" src.c" , files[0 ]);
2941+ ASSERT_EQUALS (" inc.h" , files[1 ]);
2942+
2943+ simplecpp::FileDataCache cache;
2944+ cache.insert ({" src.c" , rawtokens_c});
2945+ cache.insert ({" inc.h" , rawtokens_h});
2946+
2947+ simplecpp::OutputList outputList;
2948+ simplecpp::DUI dui;
2949+ dui.includes .emplace_back (" inc.h" );
2950+ dui.includes .emplace_back (" missing.h" );
2951+ cache = simplecpp::load (rawtokens_c, files, dui, &outputList, std::move (cache));
2952+
2953+ ASSERT_EQUALS (1 , outputList.size ());
2954+ ASSERT_EQUALS (" Can not open include file 'missing.h' that is explicitly included." , outputList.begin ()->msg );
2955+ }
2956+
2957+ static void include11 () // #669 - -include with preprocess()
2958+ {
2959+ const char code_c[] = " X\n " ;
2960+ const char code_h[] = " #define X 123\n " ;
2961+
2962+ std::vector<std::string> files;
2963+
2964+ const simplecpp::TokenList rawtokens_c = makeTokenList (code_c, files, " src.c" );
2965+ const simplecpp::TokenList rawtokens_h = makeTokenList (code_h, files, " inc.h" );
2966+
2967+ ASSERT_EQUALS (2U , files.size ());
2968+ ASSERT_EQUALS (" src.c" , files[0 ]);
2969+ ASSERT_EQUALS (" inc.h" , files[1 ]);
2970+
2971+ simplecpp::FileDataCache cache;
2972+ cache.insert ({" src.c" , rawtokens_c});
2973+ cache.insert ({" inc.h" , rawtokens_h});
2974+
2975+ simplecpp::OutputList outputList;
2976+ simplecpp::TokenList out (files);
2977+ simplecpp::DUI dui;
2978+ dui.includes .emplace_back (" inc.h" );
2979+ dui.includes .emplace_back (" missing.h" );
2980+ simplecpp::preprocess (out, rawtokens_c, files, cache, dui, &outputList);
2981+
2982+ ASSERT_EQUALS (" 123" , out.stringify ());
2983+ ASSERT_EQUALS (1 , outputList.size ());
2984+ ASSERT_EQUALS (" Can not open include file 'missing.h' that is explicitly included." , outputList.begin ()->msg );
2985+ }
2986+
29292987static void readfile_nullbyte ()
29302988{
29312989 const char code[] = " ab\0 cd" ;
@@ -4118,6 +4176,8 @@ static void runTests(int argc, char **argv, Input input)
41184176 TEST_CASE (include7); // #include MACRO
41194177 TEST_CASE (include8); // #include MACRO(X)
41204178 TEST_CASE (include9); // #include MACRO
4179+ TEST_CASE (include10); // -include with load()
4180+ TEST_CASE (include11); // -include with preprocess()
41214181
41224182 TEST_CASE (multiline1);
41234183 TEST_CASE (multiline2);
0 commit comments