⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notationfile_test.cpp

📁 机甲指挥官2源代码
💻 CPP
字号:
//===========================================================================//
// File:     notation.tcp                                                    //
// Title:    Definition of NotationFile TestClass methods.                   //
// Purpose:  Provide general purpose access to data stored in a formatted    //
//           text file.                                                      //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#include "StuffHeaders.hpp"
#include <ToolOS.hpp>

//#############################################################################
//##############    NotationFile::TestClass    ################################
//#############################################################################

bool
	NotationFile::TestClass()
{
	SPEW((GROUP_STUFF_TEST, "Starting NotationFile test..."));

	Check_Object(FileStreamManager::Instance);

	const char
		*notation_snapshot = "notation.snapshot",
		*page_1_name = "Page 1",
		*page_2_name = "Page 2",
		*page_3_name = "Page 3",
		*page_5_name = "Page 5",
		*page_8_name = "Page 8",
		*page_9_name = "Page9",
		*sub_page_name = "SubPage1",

		*note_1_name = "Entry 1",
		*note_2_name = "Entry 2",
		*note_3_name = "Entry 3",
		*note_4_name = "Entry 4",
		*note_5_name = "Entry 5",
		*note_6_name = "Entry 6",
		*note_9_name = "Entry 9",

		*text_a = "Text Line A",
		*text_b = "Text Line B",
		*text_c = "Text Line C",
		*text_i = "-35",
		*text_s = "3.1415",
		*text_d = "1.99d+199",
		*text_t = "yes",
		*text_f = "no",
		*string_value;

	Page
		*page,
		*sub_page=NULL,
		*page_1=NULL,
		*page_2=NULL,
		*page_3=NULL,
		*page_5=NULL,
		*page_8=NULL,
		*page_9=NULL;

	PageIterator *pages;

	//
	//----------------------------------------
	// test NotationFile part 1 - create file
	//----------------------------------------
	//
	{
		NotationFile file;
		Test_Assumption(file.IsEmpty());
		Test_Assumption(!file.IsChanged());

		pages = file.MakePageIterator();
		Test_Assumption(pages);
		Test_Assumption(pages->GetSize() == 0);
		Check_Object(pages);
		delete pages;

		file.SaveAs(notation_snapshot);

		page_2 = file.AddPage(page_2_name);
		Test_Assumption(page_2);
		page_2->SetEntry(note_4_name, text_a);

		Test_Assumption(!file.FindPage(page_1_name));
		page = file.FindPage(page_2_name);
		Test_Assumption(page);
		Test_Assumption(!page->GetEntry(note_2_name, &string_value));
		Test_Assumption(page->GetEntry(note_4_name, &string_value));
		Test_Assumption(!strcmp(string_value, text_a));

		page_2->SetEntry(note_2_name, text_s);
		page_1 = file.AddPage(page_1_name);
		page_1->SetEntry(note_5_name, text_i);
		page_9 = file.AddPage(page_9_name);
		page_9->SetEntry(note_6_name, text_b);
		page_8 = file.AddPage(page_8_name);
		page_2->SetEntry(note_3_name, text_d);
		page_1->SetEntry(note_4_name, text_b);
		page_9->SetEntry(note_5_name, true);
		page_8->SetEntry(note_3_name, text_c);
		page_5 = file.AddPage(page_5_name);
		page_5->SetEntry(note_5_name, text_a);
		page_9->SetEntry(note_2_name, false);

		NotationFile subfile;
		sub_page = subfile.AddPage(sub_page_name);
		Check_Object(sub_page);
		sub_page->SetEntry(note_1_name, text_a);
		page_1->SetEntry(note_2_name, &subfile);

		page_8->DeleteNote(note_1_name);
		page_1->DeleteNote(note_5_name);
		page_9->SetEntry(note_1_name, text_t);
		page_2->SetEntry(note_3_name, text_c);
		page_1->SetEntry(note_1_name, text_i);
		page_5->AppendEntry(note_5_name, text_b);
		page_9->SetEntry(note_3_name, text_f);
		page_8->SetEntry(note_1_name, text_d);
		page_1->SetEntry(note_9_name, text_s);
		page_9->AppendEntry(note_9_name, true);
		page_8->SetEntry(note_2_name, text_i);
		page_9->SetEntry(note_4_name, false);

		file.SaveAs(notation_snapshot);

		// notation file should look like this:
		//			 (page_2_name, note_4_name, text_a)
		//			 (page_2_name, note_2_name, text_s)
		//			 (page_2_name, note_3_name, text_c)
		//			 (page_1_name, note_4_name, text_b)
		//			 (page_1_name, note_2_name, <<subfile>>
		//			 (page_1_name, note_1_name, text_i)
		//			 (page_1_name, note_9_name, text_s)
		//			 (page_9_name, note_6_name, text_b)
		//			 (page_9_name, note_5_name, 1)
		//			 (page_9_name, note_2_name, false)
		//			 (page_9_name, note_1_name, text_t)
		//			 (page_9_name, note_3_name, text_f)
		//			 (page_9_name, note_9_name, true)
		//			 (page_9_name, note_4_name, 0)
		//			 (page_8_name, note_3_name, text_c)
		//			 (page_8_name, note_1_name, text_d)
		//			 (page_8_name, note_2_name, text_i)
		//			 (page_5_name, note_5_name, text_a)
		//			 (page_5_name, note_5_name, text_b)

		Test_Assumption(file.DoesPageExist("pAgE9"));
		pages = file.MakePageIterator();
		Test_Assumption(pages);
		Test_Assumption(pages->GetSize() == 5);
		page = pages->ReadAndNext();
		Test_Assumption(page_2 == page);
		page = pages->ReadAndNext();
		Test_Assumption(page_1 == page);
		page = pages->ReadAndNext();;
		Test_Assumption(page_9 == page);
		page = pages->ReadAndNext();
		Test_Assumption(page_8 == page);
		page = pages->ReadAndNext();
		Test_Assumption(page_5 == page);
		Test_Assumption(!strcmp(page->GetName(), page_5_name));
		Check_Object(pages);
		delete pages;
		Test_Assumption(!file.IsChanged());

		pages = file.MakePageIterator();
		Test_Assumption(pages);
		Test_Assumption(pages->GetSize() == 5);
		Check_Object(pages);
		delete pages;
//	}

	//
	//--------------------------------------
	// Now we open up a second notation file
	//--------------------------------------
	//
//	{
		NotationFile file2(notation_snapshot);
		Test_Assumption(!file2.IsChanged());

		page_5 = file2.FindPage(page_5_name);
		Test_Assumption(page_5);
		Page::NoteIterator *notes = page_5->MakeNoteIterator();
		Test_Assumption(notes);
		Test_Assumption(notes->GetSize() == 2);
		Note *note = notes->ReadAndNext();
		Test_Assumption(!strcmp(note->GetName(), note_5_name));
		note = notes->ReadAndNext();
		Test_Assumption(!strcmp(note->GetName(), note_5_name));
		Check_Object(notes);
		delete notes;

		//
		//-------------------------
		// Test the integer readers
		//-------------------------
		//
		int integer_value;
		Scalar scalar_value;
		bool logical_value;
		page_3 = file2.FindPage(page_3_name);
		Test_Assumption(!page_3);
		page_2 = file2.FindPage(page_2_name);
		Test_Assumption(page_2);
		Test_Assumption(!page_2->GetEntry(note_5_name, &scalar_value));
		page_1 = file2.FindPage(page_1_name);
		Test_Assumption(page_1);
		Test_Assumption(page_1->GetEntry(note_1_name, &integer_value));
		Test_Assumption(integer_value == atoi(text_i));
		Test_Assumption(page_2->GetEntry(note_2_name, &scalar_value));
		Test_Assumption(Close_Enough(scalar_value, (Scalar)AtoF(text_s)));
		Test_Assumption(page_1->GetEntry(note_4_name, &string_value));
		Test_Assumption(!strcmp(string_value, text_b));
		Test_Assumption(page_5->GetEntry(note_5_name, &string_value));
		Test_Assumption(!strcmp(string_value, text_a));
		page_9 = file2.FindPage(page_9_name);
		Test_Assumption(page_9);
		Test_Assumption(page_9->GetEntry(note_9_name, &logical_value));
		Test_Assumption(logical_value);
		Test_Assumption(page_9->GetEntry(note_1_name, &logical_value));
		Test_Assumption(logical_value);
		Test_Assumption(page_9->GetEntry(note_5_name, &logical_value));
		Test_Assumption(logical_value);
		Test_Assumption(page_9->GetEntry(note_3_name, &logical_value));
		Test_Assumption(!logical_value);
		Test_Assumption(page_9->GetEntry(note_2_name, &logical_value));
		Test_Assumption(!logical_value);
		Test_Assumption(page_9->GetEntry(note_4_name, &logical_value));
		Test_Assumption(!logical_value);
		Test_Assumption(!file2.IsChanged());

		NotationFile subfile2;
		Test_Assumption(page_1->GetEntry(note_2_name, &subfile2));
		sub_page = subfile2.FindPage(sub_page_name);
		Test_Assumption(sub_page);
		Test_Assumption(sub_page->GetEntry(note_1_name, &string_value));
		Test_Assumption(!strcmp(string_value, text_a));

		file2.DeletePage(page_2_name);
		Test_Assumption(file2.IsChanged());
		Test_Assumption(!file2.DoesPageExist(page_2_name));

		page_1->DeleteNote(note_1_name);
		notes = page_1->MakeNoteIterator();
		Test_Assumption(notes);
		Test_Assumption(notes->GetSize() == 3);
		note = notes->GetCurrent();
		Test_Assumption(note);
		Test_Assumption(!strcmp(note->GetName(), note_4_name));
		Check_Object(notes);
		delete note;
		file2.IgnoreChanges();
	}

	//
	// TESTING PRE-PROCESSOR STYLE COMMANDS
	//
	const char* include_temp;
	const char* base_name = "base.ini";
	const char* inc_name = "inc.ini";
	{
		NotationFile basefile;
		page = basefile.AddPage("Page 1");
		Test_Assumption(page);
		page->SetEntry("Pro_wrestling", "GoldFishShoes");
		page->SetEntry("!Erica", "HotBabe");
		page->AddNote("!include inc.ini");
		page->SetEntry("OurHeroes", "$(GOTHAM_HEROES)");
		page->SetEntry("Notes", notation_snapshot);
		basefile.SaveAs(base_name);
	}

	{
		NotationFile incfile;
		page = incfile.AddPage("Page 22");
		Test_Assumption(page);
		page->SetEntry("!Batman", "BruceWayne");
		page->SetEntry("!Robin", "DickGrayson");
		page->SetEntry("$(Batman)", "not $(Erica)");
		page->SetEntry("!GOTHAM_HEROES", "$(Batman) + $(Robin)");
		incfile.SaveAs(inc_name);
	}

	{
		NotationFile rawfile(base_name, Raw);
		page = rawfile.FindPage("Page 22");
		Test_Assumption(!page);
		page = rawfile.FindPage("Page 1");
		Test_Assumption(page);
		Test_Assumption(page->GetEntry("OurHeroes", &include_temp));
		Test_Assumption(!strcmp(include_temp, "$(GOTHAM_HEROES)"));
	}

	{
		NotationFile processed(base_name);
		processed.SaveAs(notation_snapshot);
		page = processed.FindPage("Page 22");
		Test_Assumption(page);
		Test_Assumption(page->GetEntry("BruceWayne", &include_temp));
		Test_Assumption(!strcmp(include_temp, "not HotBabe"));
		Test_Assumption(page->GetEntry("OurHeroes", &include_temp));
		Test_Assumption(!strcmp(include_temp, "BruceWayne + DickGrayson"));
	}

	gos_DeleteFile(base_name);
	gos_DeleteFile(inc_name);
	gos_DeleteFile(notation_snapshot);

	return true;
}

//#############################################################################
//#############################################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -