leo icon indicating copy to clipboard operation
leo copied to clipboard

Prototype diff formatting for discussion

Open agrrr3 opened this issue 7 years ago • 3 comments

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 avatar Nov 22 '17 13:11 agrrr3

@agrrr3 this is an interesting feature, can you paste some example output in here?

ragboyjr avatar Feb 16 '18 08:02 ragboyjr

@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...

agrrr3 avatar Feb 20 '18 12:02 agrrr3

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?

ragboyjr avatar Feb 20 '18 20:02 ragboyjr