Files
firestorm/Gameleap/code/mw4/Libraries/stuff/NotationFile_Test.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

331 lines
11 KiB
C++

//===========================================================================//
// File: notation.tcp //
// Title: Definition of NotationFile TestClass methods. //
// Project: Munga //
// Author: Ken Olsen //
// Purpose: Provide general purpose access to data stored in a formatted //
// text file. //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 01/07/95 KEO Stub-out TestClass method. //
// 02/07/95 KEO Add AppendEntry methods. //
// 02/17/95 KEO Change page_2 and entry lists to make nomenclature. //
// 03/24/95 KEO Add tests for new in-memory read and write methods. //
// 03/31/95 KEO Add tests for lab only methods. //
// 11/11/95 KEO Correct and improve testing. //
//---------------------------------------------------------------------------//
// Copyright (c) 1994, 1995 Virtual World Entertainment, Inc. //
// All rights reserved worldwide. //
// This unpublished source code is PROPRIETARY and CONFIDENTIAL. //
//===========================================================================//
#include "StuffHeaders.hpp"
#include <GameOS\ToolOS.hpp>
#pragma warning(disable: 4189) // disable unreferenced variable warning
//#############################################################################
//############## 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 = NULL;
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;
Verify(file.IsEmpty());
Verify(!file.IsChanged());
pages = file.MakePageIterator();
Verify(pages);
Verify(pages->GetSize() == 0);
Check_Object(pages);
delete pages;
file.SaveAs(notation_snapshot);
page_2 = file.AddPage(page_2_name);
Verify(page_2);
page_2->SetEntry(note_4_name, text_a);
Verify(!file.FindPage(page_1_name));
page = file.FindPage(page_2_name);
Verify(page);
Verify(!page->GetEntry(note_2_name, &string_value));
Verify(page->GetEntry(note_4_name, &string_value));
Verify(!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)
Verify(file.DoesPageExist("pAgE9"));
pages = file.MakePageIterator();
Verify(pages);
Verify(pages->GetSize() == 5);
page = pages->ReadAndNext();
Verify(page_2 == page);
page = pages->ReadAndNext();
Verify(page_1 == page);
page = pages->ReadAndNext();;
Verify(page_9 == page);
page = pages->ReadAndNext();
Verify(page_8 == page);
page = pages->ReadAndNext();
Verify(page_5 == page);
Verify(!strcmp(page->GetName(), page_5_name));
Check_Object(pages);
delete pages;
Verify(!file.IsChanged());
pages = file.MakePageIterator();
Verify(pages);
Verify(pages->GetSize() == 5);
Check_Object(pages);
delete pages;
// }
//
//--------------------------------------
// Now we open up a second notation file
//--------------------------------------
//
// {
NotationFile file2(notation_snapshot);
Verify(!file2.IsChanged());
page_5 = file2.FindPage(page_5_name);
Verify(page_5);
Page::NoteIterator *notes = page_5->MakeNoteIterator();
Verify(notes);
Verify(notes->GetSize() == 2);
Note *note = notes->ReadAndNext();
Verify(!strcmp(note->GetName(), note_5_name));
note = notes->ReadAndNext();
Verify(!strcmp(note->GetName(), note_5_name));
Check_Object(notes);
delete notes;
//
//-------------------------
// Test the integer readers
//-------------------------
//
int integer_value=0;
Scalar scalar_value=0.0f;
bool logical_value=false;
page_3 = file2.FindPage(page_3_name);
Verify(!page_3);
page_2 = file2.FindPage(page_2_name);
Verify(page_2);
Verify(!page_2->GetEntry(note_5_name, &scalar_value));
page_1 = file2.FindPage(page_1_name);
Verify(page_1);
Verify(page_1->GetEntry(note_1_name, &integer_value));
Verify(integer_value == atoi(text_i));
Verify(page_2->GetEntry(note_2_name, &scalar_value));
Verify(Close_Enough(scalar_value, (Scalar)AtoF(text_s)));
Verify(page_1->GetEntry(note_4_name, &string_value));
Verify(!strcmp(string_value, text_b));
Verify(page_5->GetEntry(note_5_name, &string_value));
Verify(!strcmp(string_value, text_a));
page_9 = file2.FindPage(page_9_name);
Verify(page_9);
Verify(page_9->GetEntry(note_9_name, &logical_value));
Verify(logical_value);
Verify(page_9->GetEntry(note_1_name, &logical_value));
Verify(logical_value);
Verify(page_9->GetEntry(note_5_name, &logical_value));
Verify(logical_value);
Verify(page_9->GetEntry(note_3_name, &logical_value));
Verify(!logical_value);
Verify(page_9->GetEntry(note_2_name, &logical_value));
Verify(!logical_value);
Verify(page_9->GetEntry(note_4_name, &logical_value));
Verify(!logical_value);
Verify(!file2.IsChanged());
NotationFile subfile2;
Verify(page_1->GetEntry(note_2_name, &subfile2));
sub_page = subfile2.FindPage(sub_page_name);
Verify(sub_page);
Verify(sub_page->GetEntry(note_1_name, &string_value));
Verify(!strcmp(string_value, text_a));
file2.DeletePage(page_2_name);
Verify(file2.IsChanged());
Verify(!file2.DoesPageExist(page_2_name));
page_1->DeleteNote(note_1_name);
notes = page_1->MakeNoteIterator();
Verify(notes);
Verify(notes->GetSize() == 3);
note = notes->GetCurrent();
Verify(note);
Verify(!strcmp(note->GetName(), note_4_name));
Check_Object(notes);
delete notes;
file2.IgnoreChanges();
}
//
// TESTING PRE-PROCESSOR STYLE COMMANDS
//
const char* include_temp = NULL;
const char* base_name = "base.ini";
const char* inc_name = "inc.ini";
{
NotationFile basefile;
page = basefile.AddPage("Page 1");
Verify(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");
Verify(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");
Verify(!page);
page = rawfile.FindPage("Page 1");
Verify(page);
Verify(page->GetEntry("OurHeroes", &include_temp));
Verify(!strcmp(include_temp, "$(GOTHAM_HEROES)"));
}
{
NotationFile processed(base_name);
processed.SaveAs(notation_snapshot);
page = processed.FindPage("Page 22");
Verify(page);
Verify(page->GetEntry("BruceWayne", &include_temp));
Verify(!strcmp(include_temp, "not HotBabe"));
Verify(page->GetEntry("OurHeroes", &include_temp));
Verify(!strcmp(include_temp, "BruceWayne + DickGrayson"));
}
gos_DeleteFile(base_name);
gos_DeleteFile(inc_name);
gos_DeleteFile(notation_snapshot);
return true;
}
//#############################################################################
//#############################################################################