This commit adds tests for the DisableMethods and DisablePointerMethods
options. All combinations of method options and Stringer interface
invocation for both pointer receivers and non-pointer receivers are
tested.
Previously, the tests did not include maps with more than a single entry
since the iteration order is randomized and the tests only accepted a
single valid expected value. This commit modifies the tests to accept
multiple valid expected values and adds tests for a multi-entry map to
both Dump and Formatter.
Rather than stuffing a ConfigState instance into a separate SpewState,
just add the functionality directly to the ConfigState. This provides
simpler syntax for the consumer.
One side effect of this change is that, unlike a zero value SpewState, a
zero value ConfigState doesn't provide default values which means the
Indent field is set to provide no indentation. The consumer is now
expected to set the indent to their desired value when declaring an
instance of ConfigState.
Alternatively, the consumer can call a new function, NewDefaultConfig,
which returns a ConfigState with default values, including a default
indentation of a single space.
For example, to change the indent to a tab, the previous syntax was:
ss := new(spew.SpewState) // or var ss spew.SpewState
scs := ss.Config()
scs.Indent = "\t"
scs.Dump(whatever)
The new syntax is simply:
scs := spew.ConfigState{Indent: "\t"}
scs.Dump(whatever)