leo
leo copied to clipboard
Prototype diff formatting for discussion
This pull request contains a unfinished prototype for discussing an implementation of a feature.
It would be good to be able to see not only that actual and expected results are different, but also one would like to see in which way they differ.
I couldnt find a way to extend leo for diffing in plugin-kind of way. So I started prototyping.
This commit prototypes a possible implementation with the following properties
- Because the relevant different depends on the type of matcher, each matcher supporting diffs (see SameMatcher) gets a $differ method to be called by the formatter
- also the matcher adds a "diff" to the format template vars
- on match, the abstract matcher adds the differ to match the result iff the result is unexpected
- Formatter reads and prints the $diff member from the matcher
- diffing is actually not implemented, that probably should be plugged in using a thirdparty lib
This indicates
- leo probably should not force diff calculation on users
- there should be a kind of extension point to add a differ implementation
So this bears the questions:
- is there a way already to hook in diffing?
- is there a better place than Matcher/Match/Formatter ? ** should diff calculation happen when matching or when formatting
- where/how would I register a Differ?
- should the Differ be added as mix-in on the Matchers?
@agrrr3 this is an interesting feature, can you paste some example output in here?
@ragboyjr this is the result of using cogpowered\FineDiff with word granularity, html-renderer and some black art:
1) string ::magicReplacer when called with escaped LIKE statements should remove escapes from backslashed percentage signs if nested:
Expected "AND DATE_OFFLINE > 'checkdate'))) AND fulltext_search.keywords LIKE '%nothilfe%' AND fulltext_search.doc_type = 'content'" to be identical to "AND DATE_OFFLINE > 'checkdate'))) AND fulltext_search.keywords LIKE '\%nothilfe\%' AND fulltext_search.doc_type = 'content'".
Difference: ...LIKE <del>'%nothilfe%' </del><ins>'\%nothilfe\%' </ins>AND fulltext_search.doc_ty...
at /home/agrrr3/tests/numble/functions/StringTest.spec.php:322
So if the html gets rendered somewhere: ...LIKE '%nothilfe%' '\%nothilfe\%' AND fulltext_search.doc_ty...
Ah, gotcha. I'm not opposed to this idea, let's make a list of tools that implementing diffing with nice output. Can you compare to what other matchers or test runners like PHPUnit, Kahlan, etc... use?