示例#1
0
static void test_dirty(void)
{
	ClassAd        *classad;
	ClassAdParser  parser;

	classad = parser.ParseClassAd(dirty_classad_text);

	cout << "Testing dirty attributes...\n";

	if (classad->IsAttributeDirty("A")) {
		cout << "  Failed: A is dirty just after construction.\n";
	} else {
		cout << "  OK: A is clean.\n";
	}

	classad->InsertAttr("B", true);
	if (classad->IsAttributeDirty("A")) {
		cout << "  Failed: A is dirty after inserting B.\n";
	} else {
		cout << "  OK: A is still clean.\n";
	}
	
	if (!classad->IsAttributeDirty("B")) {
		cout << "  Failed: B is not dirty.\n";
	} else {
		cout << "  OK: B is dirty.\n";
	}

	ClassAd::dirtyIterator  it = classad->dirtyBegin();
	
	if (it == classad->dirtyEnd()) {
		cout << "  Failed: Dirty iterator gives us nothing.\n";
	} else {
		if ((*it) != "B") {
			cout << "  Failed: Dirty iterator is not pointing at B.\n";
		} else {
			cout << "  OK: Dirty iterator starts out okay.\n";

			it++;
			if (it != classad->dirtyEnd()) {
				cout << "  Failed: Dirty iterator it not at end.\n";
			} else {
				cout << "  OK: Dirty iterator ends okay.\n";
			}
		}
	}

	classad->ClearAllDirtyFlags();
	if (classad->IsAttributeDirty("B")) {
		cout << "  Failed: B is dirty after clearing flags.\n";
	} else {
		cout << "  OK: B is clean.\n";
	}

	classad->MarkAttributeDirty("A");
	if (!classad->IsAttributeDirty("A")) {
		cout << "  Failed: A is not dirty.\n";
	} else {
		cout << "  OK: A is dirty.\n";
	}

	classad->MarkAttributeClean("A");
	if (classad->IsAttributeDirty("A")) {
		cout << "  Failed: A is dirty after cleaning it.\n";
	} else {
		cout << "  OK: A is clean.\n";
	}

	return;
}