function makeAltPropTestCase()

in modules/test-utils/src/generate-layer-tests.js [115:186]


function makeAltPropTestCase({propName, propTypes, defaultProps, sampleProps, assert}) {
  const newProps = {...sampleProps};
  const propDef = propTypes[propName];

  if (!propDef) {
    return null;
  }

  switch (propDef.type) {
    case 'boolean':
      newProps[propName] = !defaultProps[propName];
      return [
        {
          title: `${propName}: ${String(newProps[propName])}`,
          props: newProps
        }
      ];

    case 'number':
      if ('max' in propDef) {
        newProps[propName] = propDef.max;
      } else if ('min' in propDef) {
        newProps[propName] = propDef.min;
      } else {
        newProps[propName] = defaultProps[propName] + 1;
      }
      return [
        {
          title: `${propName}: ${String(newProps[propName])}`,
          props: newProps
        }
      ];

    case 'accessor': {
      if (typeof defaultProps[propName] === 'function') {
        return null;
      }
      let callCount = 0;
      newProps[propName] = () => {
        callCount++;
        return defaultProps[propName];
      };
      newProps.updateTriggers = {
        [propName]: 'function'
      };
      const onBeforeUpdate = () => (callCount = 0);
      const onAfterUpdate = () => assert(callCount > 0, 'accessor function is called');

      return [
        {
          title: `${propName}: () => ${defaultProps[propName]}`,
          props: newProps,
          onBeforeUpdate,
          onAfterUpdate
        },
        {
          title: `${propName}: updateTrigger`,
          updateProps: {
            updateTriggers: {
              [propName]: 'function+trigger'
            }
          },
          onBeforeUpdate,
          onAfterUpdate
        }
      ];
    }

    default:
      return null;
  }
}