Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prototype diff formatting for discussion #30

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

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