Skip to content

Conversation

@agrrr3
Copy link

@agrrr3 agrrr3 commented Nov 22, 2017

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?

Feature request:

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?
@ragboyjr
Copy link

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

@agrrr3
Copy link
Author

agrrr3 commented Feb 20, 2018

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

@ragboyjr
Copy link

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants