Unit Tests - Complete Att unit tests

- Covers parsing, composition.
This commit is contained in:
Paul Beckingham 2009-05-31 00:10:35 -04:00
parent ed685a55ce
commit 766c2d3620
3 changed files with 61 additions and 36 deletions

View file

@ -100,6 +100,9 @@ bool Att::parse (Nibbler& n)
if (n.getUntilOneOf (".:", mName)) if (n.getUntilOneOf (".:", mName))
{ {
if (mName.length () == 0)
throw std::string ("Missing attribute name");
while (n.skip ('.')) while (n.skip ('.'))
{ {
std::string mod; std::string mod;
@ -113,8 +116,15 @@ bool Att::parse (Nibbler& n)
{ {
if (n.getQuoted ('"', mValue)) if (n.getQuoted ('"', mValue))
return true; return true;
else if (n.getUntil (' ', mValue))
// This is here to tolerate unquoted values.
// Consider removing this for a stricter parse.
if (n.getUntil (' ', mValue))
{
dequote (mValue);
decode (mValue);
return true; return true;
}
throw std::string ("Missing attribute value"); throw std::string ("Missing attribute value");
} }

View file

@ -212,7 +212,7 @@ bool Nibbler::skipAllOneOf (const std::string& chars)
bool Nibbler::getQuoted (char c, std::string& result) bool Nibbler::getQuoted (char c, std::string& result)
{ {
std::string::size_type start = mCursor; std::string::size_type start = mCursor;
if (start < mInput.length () - 1 && mInput[start] == c) if (start < mInput.length () && mInput[start] == c)
{ {
++start; ++start;
if (start < mInput.length ()) if (start < mInput.length ())

View file

@ -30,7 +30,7 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (33); UnitTest t (36);
Att a1 ("name", "value"); Att a1 ("name", "value");
t.is (a1.name (), "name", "Att::Att (name, value), Att.name"); t.is (a1.name (), "name", "Att::Att (name, value), Att.name");
@ -66,85 +66,100 @@ int main (int argc, char** argv)
// Att::addMod // Att::addMod
bool good = true; bool good = true;
try {a6.addMod ("is");} catch (...) {t.fail ("Att::addMod (is)"); good = false;} try {a6.addMod ("is");} catch (...) {good = false;}
if (good) t.pass ("Att::addMod (is)"); t.ok (good, "Att::addMod (is)");
good = true; good = true;
try {a6.addMod (Mod ("fartwizzle"));} catch (...) {t.pass ("Att::addMod (fartwizzle) failed"); good = false;} try {a6.addMod (Mod ("fartwizzle"));} catch (...) {good = false;}
if (good) t.fail ("Att::addMod (fartwizzle)"); t.notok (good, "Att::addMod (fartwizzle)");
// Att::parse // Att::parse
Nibbler n (""); Nibbler n ("");
Att a7; Att a7;
good = true; good = true;
try {a7.parse (n);} catch (...) {t.pass ("Att::compose () -> throw"); good = false;} try {a7.parse (n);} catch (...) {good = false;}
if (good) t.fail ("Att::composeF4 () -> throw"); t.notok (good, "Att::parse () -> throw");
n = Nibbler ("name:value"); n = Nibbler ("name:value");
// TODO throws here -->
a7.parse (n); a7.parse (n);
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:value)"); t.is (a7.composeF4 (), "name:\"value\"",
"Att::parse (name:value)");
n = Nibbler ("name:\"value\""); n = Nibbler ("name:\"value\"");
a7.parse (n); a7.parse (n);
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:\"value\")"); t.is (a7.composeF4 (), "name:\"value\"",
"Att::parse (name:\"value\")");
n = Nibbler ("name:\"one two\""); n = Nibbler ("name:\"one two\"");
a7.parse (n); a7.parse (n);
t.is (a7.composeF4 (), "name:\"one two\"", "Att::composeF4 (name:\"one two\")"); t.is (a7.composeF4 (), "name:\"one two\"",
"Att::parse (name:\"one two\")");
n = Nibbler ("name:\"&quot;\""); n = Nibbler ("name:\"&quot;\"");
a7.parse (n); a7.parse (n);
t.is (a7.composeF4 (), "name:\"&quot;\"", "Att::composeF4 (name:\"&quot;\")"); t.is (a7.composeF4 (), "name:\"&quot;\"",
"Att::parse (name:\"&quot;\")");
n = Nibbler ("name:\"&tab;&quot;&comma;&open;&close;&colon;\""); n = Nibbler ("name:\"&tab;&quot;&comma;&open;&close;&colon;\"");
a7.parse (n); a7.parse (n);
t.is (a7.composeF4 (), "name:\"&tab;&quot;&comma;&open;&close;&colon;\"", t.is (a7.composeF4 (), "name:\"&tab;&quot;&comma;&open;&close;&colon;\"",
"Att::composeF4 (name:\"&tab;&quot;&comma;&open;&close;&colon;\")"); "Att::parse (name:\"&tab;&quot;&comma;&open;&close;&colon;\")");
n = Nibbler ("total gibberish"); n = Nibbler ("total gibberish");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (total gibberish)"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (total gibberish)");
n = Nibbler ("malformed"); n = Nibbler ("malformed");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (malformed)"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (malformed)");
n = Nibbler (":malformed"); n = Nibbler (":malformed");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (:malformed)"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (:malformed)");
n = Nibbler (":\"\""); n = Nibbler (":\"\"");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (:\"\")"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (:\"\")");
n = Nibbler (":\""); n = Nibbler (":\"");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (:\")"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (:\")");
n = Nibbler ("name:"); n = Nibbler ("name:");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (name:)"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (name:)");
n = Nibbler ("name:\"value"); n = Nibbler ("name:\"value");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:\"value)"); try {a7.parse (n);} catch (...) {good = false;}
t.ok (good, "Att::parse (name:\"value)");
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 -> name:\"value\"");
n = Nibbler ("name:value\""); n = Nibbler ("name:value\"");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:value\")"); try {a7.parse (n);} catch (...) {good = false;}
t.ok (good, "Att::parse (name:value\")");
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 -> name:\"value\"");
n = Nibbler ("name:val\"ue"); n = Nibbler ("name:val\"ue");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:val\"ue)"); try {a7.parse (n);} catch (...) {good = false;}
t.ok (good, "Att::parse (name:val\"ue)");
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 -> name:\"value\"");
n = Nibbler ("name:\"\"va\"\"\"\"\"lu\"\"\"e\"\""); n = Nibbler ("name:\"\"va\"\"\"\"\"lu\"\"\"e\"\"");
a7.parse (n);
t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:\"\"va\"\"\"\"\"lu\"\"\"e\"\")"); t.is (a7.composeF4 (), "name:\"value\"", "Att::composeF4 (name:\"\"va\"\"\"\"\"lu\"\"\"e\"\")");
n = Nibbler ("name\""); n = Nibbler ("name\"");
a7.parse (n); good = true;
t.is (a7.composeF4 (), "", "Att::composeF4 (name\")"); try {a7.parse (n);} catch (...) {good = false;}
t.notok (good, "Att::parse (name\")");
return 0; return 0;
} }