Commit Graph

91 Commits

Author SHA1 Message Date
Dave Collins a9907c1584 Improve invalid reflect value handling.
It was previously possible for an invalid reflect value to lead to a panic
in certain obscure cases.  Rather than adding multiple checks for the
invalid reflect value, handle invalid reflect values immediately.
2013-01-20 20:44:21 -06:00
Dave Collins f2641d5e6e Add tests for structs with multiple equiv fields.
This commit adds tests for a struct which has an embedded struct pointer
and a field that is a pointer to the same object.  This ensures the cycle
detection is properly reset between fields.
2013-01-20 19:55:55 -06:00
Dave Collins cddf8663bd Add dump test for max depth option. 2013-01-20 18:56:59 -06:00
Dave Collins ddb71712f6 Add test for max depth option. 2013-01-20 18:43:14 -06:00
Dave Collins a5085b9f9c Move spew tests init into its own function. 2013-01-20 18:24:29 -06:00
Dave Collins 44d9c97c1a Add tests for disable method options.
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.
2013-01-20 17:53:55 -06:00
Dave Collins 6024e0c79e Invoke String/Error methods on addressable vals.
If a type implements a Stringer or error interface with a pointer receiver
and the value being formatted is addressable, the interface should be
invoked even when the DisablePointerMethods option is set.
DisablePointerMethods is only intended to prevent the potentially unsafe
action of stepping around type-safety restriction to invoke a Stringer or
error interface with a pointer to an unaddressable value.
2013-01-20 17:37:24 -06:00
Dave Collins 0cd00fd3ae Add ConfigState to spewTests.
This paves the way for tests against the ConfigState options.
2013-01-20 16:30:54 -06:00
Dave Collins 3ad8c5b5ee Add tests for sub-interfaces. 2013-01-20 15:27:57 -06:00
Dave Collins eba42209a7 Add formatter passthrough tests for non %v verbs. 2013-01-20 14:03:59 -06:00
Dave Collins 89496a6569 Add tests for types with custom Error interface. 2013-01-20 13:41:53 -06:00
Dave Collins 57a610269f Abstract common test types and functions. 2013-01-20 13:31:01 -06:00
Dave Collins ad1d81b355 Add tests for custom type that panics in Stringer. 2013-01-20 12:31:42 -06:00
Dave Collins 5c8d842977 Add tests for maps with multiple entries.
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.
2013-01-20 12:02:36 -06:00
Dave Collins 1c16a20c21 Make overview ConfigState options order consistent. 2013-01-19 19:46:13 -06:00
Dave Collins c2fe715681 Update README.md 2013-01-19 19:21:03 -06:00
Dave Collins 13fc9b8d2f Move SpewState methods to ConfigState.
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)
2013-01-19 19:00:25 -06:00
Dave Collins 6026234f2b Add tests for public package and SpewState funcs. 2013-01-18 01:51:25 -06:00
Dave Collins e48df78db8 Update test summaries. 2013-01-17 21:40:54 -06:00
Dave Collins 9df67c91eb Add dump tests for interface arrays and slices. 2013-01-17 21:35:19 -06:00
Dave Collins 596fe65916 Update README.md 2013-01-17 19:17:58 -06:00
Dave Collins 8591790312 Add test for new %#v and %#+v Formatter flags. 2013-01-17 18:51:47 -06:00
Dave Collins 1f81f22357 Implement support for %#v and %#+v in Formatter.
This commit implements feature request #3.  In particular, it allows the
formatter to respond to %#v and %#+v.  The # flag (%#v) adds type
information to the output and the combination of the # and + flags (%#+v)
adds both type information and pointer information.  This allows the
consumer a choice between displaying types, pointer information, or both.
2013-01-17 18:43:51 -06:00
Dave Collins c5fba05307 Fix a comment and a apply few gofmt changes. 2013-01-16 23:30:06 -06:00
Dave Collins 34805dbdb5 Add full suite of tests for Formatter. 2013-01-14 17:31:27 -06:00
Dave Collins 73b25df0f5 Namespace dump tests. 2013-01-14 08:53:38 -06:00
Dave Collins bd6dd81322 Use writer directly in formatter.
Write directly to the fmt.State output writer to avoid the overhead
of a buffer in the formatter code.
2013-01-14 00:23:18 -06:00
Dave Collins 638b62b9f5 Fix a few comment typos and improve consistency. 2013-01-13 00:17:58 -06:00
Dave Collins e892c84d38 Add tests for non-interface nil pointers.
These tests are a slight adaptation of tests provided by
kortschak@ in issue #4.  Credits go to him.
2013-01-12 23:36:46 -06:00
Dave Collins 389ea44d6a Fix incorrect type display on nil pointers.
This was reported by korschak as issue #4 who also pinpointed the issue
and provided a patch.
2013-01-12 23:30:04 -06:00
Dave Collins a2ceabae67 Minor code cleanup in dump_test.go. 2013-01-12 23:24:56 -06:00
Dave Collins 1dd6d991eb Update ConfigState documentation.
There is now support for concurrent configuration through the use of
SpewState instances.  Update the documenation to properly reflect this.
2013-01-12 12:35:23 -06:00
Dave Collins 034a2a5a5e Implement support for unqiue config instances.
This commit adds a new type, SpewState, which can be used to create
instances with unique configuration options.  The methods of SpewState are
equivalent to the top-level functions.  Full documentation and examples
are included.
2013-01-12 12:06:59 -06:00
Dave Collins 40eb25a95d Update README.md 2013-01-10 20:59:09 -06:00
Dave Collins f9d7671844 Update README.md 2013-01-10 20:56:26 -06:00
Dave Collins 184d118062 Add config pointers to format and dump states.
This paves the way to support individual configuration options through a
separate type while still providing the simple global config and package
level methods.
2013-01-10 20:39:05 -06:00
Dave Collins 04998fcda3 Fix a couple of comment typos. 2013-01-10 15:43:40 -06:00
Dave Collins f83c452899 Update README.md 2013-01-08 23:55:23 -06:00
Dave Collins 948e031645 Update README.md 2013-01-08 23:51:09 -06:00
Dave Collins 1a599b7b25 Initial implementation. 2013-01-08 23:38:16 -06:00
Dave Collins d9f15c7ff8 Initial commit 2013-01-08 21:18:23 -08:00