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

Options mutation yields 'Unable to use "strict" and "tolerance" options together' error. #41

Open
Izhaki opened this issue Sep 20, 2018 · 1 comment

Comments

@Izhaki
Copy link

Izhaki commented Sep 20, 2018

Snippet:

const getImageDiff = async (reference, current) => new Promise((resolve, reject) => {
  const options = {
    highlightColor: '#ff00ff',
    strict: true,
  };

  looksSame(reference, current, options, function(error, equal) {
    if (error) reject(error);
    if (!equal) {
      looksSame.createDiff({reference, current, ...options}, function(error, buffer) {
        if (error) reject(error);
        resolve(buffer);
      });
    }
    resolve();
  });
});

Will throw:

Unable to use "strict" and "tolerance" options together

This happens on looksSame.createDiff() since looksSame() mutates the options to look like this:

{ 
  highlightColor: '#ff00ff',
  strict: true,
  tolerance: 2.3,
  ignoreAntialiasing: true,
  antialiasingTolerance: 0 
}
  • I don't think any operation should mutate the options object since it is owned by the client code.
  • Especially not so if this mutates it into an invalid state.

PS. Would be grand to have equal returned with createDiff: looksSame.createDiff(options, function(error, buffer, equal) would save some of the logic above.

@scottrippey
Copy link

Had the same problem, thank you for finding this!
The workaround I'm using is along these lines:

looksSame(baseline, actual, { ... options }, (err, { equal }) => {
  if (equal) return;
  looksSame.createDiff({
    reference: baseline,
    current: actual,
    ...options
  });
);

But I would appreciate an actual fix!

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

No branches or pull requests

2 participants