[Wheat-cvs] r1/root/library base.ws,1.57,1.58 render.ws,1.37,1.38 wheatunit.ws,1.43,1.44
Status: Pre-Alpha
Brought to you by:
mark_lentczner
From: Jim K. <ki...@us...> - 2005-04-30 01:02:57
|
Update of /cvsroot/wheat/r1/root/library In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6159/root/library Modified Files: base.ws render.ws wheatunit.ws Log Message: Add assert-match to render traces. Index: wheatunit.ws =================================================================== RCS file: /cvsroot/wheat/r1/root/library/wheatunit.ws,v retrieving revision 1.43 retrieving revision 1.44 diff -u -d -r1.43 -r1.44 --- wheatunit.ws 30 Mar 2005 07:23:04 -0000 1.43 +++ wheatunit.ws 30 Apr 2005 01:02:49 -0000 1.44 @@ -120,8 +120,8 @@ } } - fail(): { - #assert("#fail called", false); + fail(message): { + #assert(message ?? "#fail called", false); } pass(): { Index: render.ws =================================================================== RCS file: /cvsroot/wheat/r1/root/library/render.ws,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- render.ws 29 Apr 2005 21:09:53 -0000 1.37 +++ render.ws 30 Apr 2005 01:02:49 -0000 1.38 @@ -255,6 +255,105 @@ return t } + + -- private -- + + find-unexpanded(): { + baddies := [ ] + i := 0 + while (i < #map.size) { + action := #map.value-at-index(i).action + if (action.matches("unexpanded")) { + baddies.add(#map.key-at-index(i) + ": not expanded") + } + else if (action.matches("repeated")) { + key := #map.key-at-index(i) + repeats := \\#map.value-at-index(i).repeats + j := 0 + while (j < repeats.size) { + b := repeats[j].find-unexpanded() + k := 0 + while (k < b.size) { + baddies.add(key + "[" + j + "]/" + b[k]) + k += 1 + } + j += 1 + } + } + + i += 1 + } + return baddies; + } + + find-mismatches(pattern): { + pattern-stream := #array-stream.new(\\pattern) + baddies := [ ] + while (pattern-stream.more()) { + key := pattern-stream.next() + expected := pattern-stream.next() + action := #action(key) + + if (true == expected) { + if (~action.matches("kept")) { + baddies.add(key + ": wasn't kept, was " + action.value) + } + } + else if (false == expected) { + if (~action.matches("skipped")) { + baddies.add(key + ": wasn't skipped, was " + action.value) + } + } + else if (expected.is-string) { + if (~action.matches("replaced")) { + baddies.add(key + ": wasn't replaced, was " + action.value) + } + else { + actual := #replacement(key) + if (expected != actual) { + baddies.add(key + ": replace expected " + ... + expected + " was " + actual) + } + } + } + else { + if (~action.matches("repeated")) { + baddies.add(key + ": wasn't repeated, was " + action.value) + } + else { + count := #repeat-count(key) + if (expected.size != count) { + baddies.add(key + ": expected " + expected.size + ... + " repeats, was " + count) + } + j := 0 + while (j < count && j < expected.size) { + b := #repeat-index(key, j).find-mismatches(expected[j]) + k := 0 + while (k < b.size) { + baddies.add(key + "[" + j + "]/" + b[k]) + k += 1 + } + j += 1 + } + } + } + } + return baddies; + } + + assert-match(testcase, pattern): { + fails := #find-unexpanded() + fails.add-all(#find-mismatches(pattern)) + if (fails.size > 0) { + message := fails.join("\n") + if (fails.size > 1) { message += "\n" } + testcase.fail(message) + } + else { + testcase.pass() + } + } } request: { @@ -1032,4 +1131,126 @@ ..., trace.errors()) } + test-trace-match-all-expanded(): { + #check-trace-match("<body tt:name='do-replace-text' />", + \#trace-expander, + ???) + } + + test-trace-match-top-level-unexpanded(): { + #check-trace-match("<body tt:name='not-expanded' />", + \#trace-expander, + "not-expanded: not expanded") + } + + test-trace-match-unexpanded-inside-repeat(): { + #check-trace-match( +""( +<body tt:name='do-repeat'><p tt:name='bob'/></body> +""), + \#trace-expander, +""( +do-repeat[0]/bob: not expanded +do-repeat[1]/bob: not expanded +do-repeat[2]/bob: not expanded +do-repeat[3]/bob: not expanded +"") + ); + } + + test-trace-match(): { + #check-trace-match( + \#trace-template, + \#trace-expander, + pattern: [ + "do-keep", true, + "do-skip", false, + "do-replace-text", "123", + "do-repeat", [ + [ "count", "nil" ], + [ "count", "uno" ], + [ "count", "due" ], + [ "count", "tre" ] + ] + ], + "not-expanded: not expanded" + ) + } + + test-trace-match-notkept(): { + #check-trace-match( + "<p tt:name='do-replace-text'/>", + \#trace-expander, + pattern: [ "do-replace-text", true ], + "do-replace-text: wasn't kept, was replaced" + ) + } + + test-trace-match-notskipped(): { + #check-trace-match( + "<p tt:name='do-replace-text'/>", + \#trace-expander, + pattern: [ "do-replace-text", false ], + "do-replace-text: wasn't skipped, was replaced" + ) + } + + test-trace-match-notreplaced(): { + #check-trace-match( + "<p tt:name='do-keep'/>", + \#trace-expander, + pattern: [ "do-keep", "456" ], + "do-keep: wasn't replaced, was kept" + ) + } + + test-trace-match-badreplace(): { + #check-trace-match( + "<p tt:name='do-replace-text'/>", + \#trace-expander, + pattern: [ "do-replace-text", "456" ], + "do-replace-text: replace expected 456 was 123" + ) + } + + test-trace-match-notrepeated(): { + #check-trace-match( + "<p tt:name='do-replace-text'/>", + \#trace-expander, + pattern: [ "do-replace-text", [ ] ], + "do-replace-text: wasn't repeated, was replaced" + ) + } + + test-trace-match-repeat-count-wrong(): { + #check-trace-match( + "<p tt:name='do-repeat'><span tt:name='count'/></p>", + \#trace-expander, + pattern: [ "do-repeat", [ ["count", "zero"] ] ], +""( +do-repeat: expected 1 repeats, was 4 +do-repeat[0]/count: replace expected zero was nil +"") + ) + } + + + + check-trace-match(template, expander, message, pattern: pattern): { + trace := $/library/render.expand( + template: \\template, + expander: \\expander, + trace: true) + testcase := $/library/wheatunit/test-case.new() + trace.assert-match(\testcase, pattern) + result := $/library/wheatunit/result.new("local", testcase) + if (message?) { + #assert-equals(false, result.passed) + #assert-equals(message, result.failure-message) + } + else { + #assert-equals(true, result.passed) + } + } + } Index: base.ws =================================================================== RCS file: /cvsroot/wheat/r1/root/library/base.ws,v retrieving revision 1.57 retrieving revision 1.58 diff -u -d -r1.57 -r1.58 --- base.ws 3 Apr 2005 07:48:00 -0000 1.57 +++ base.ws 30 Apr 2005 01:02:49 -0000 1.58 @@ -146,6 +146,13 @@ } return true; } + add-all(other): { + i := 0 + while (i < other.size) { + #add(other[i]) + i += 1 + } + } } nothingness: { @@ -414,6 +421,9 @@ } return false; } + + key-at-index(i): { return #entries[i].key } + value-at-index(i): { return \#entries[i].value } clear(): { #entries := ???; } } |