io-ts-fuzzer - Fuzzing for io-ts codecs and types
io-ts-fuzzer
lets you generate examples of a given io-ts
type.
Quick Start
After yarn add io-ts io-ts-fuzzer
...
import * as t from 'io-ts';
import * as fuzz from 'io-ts-fuzzer';
const r = fuzz.createCoreRegistry();
const target = t.union([t.string, t.type({n:t.number, b:t.boolean})]);
const fuzzer = fuzz.exampleGenerator(r, target);
console.log(fuzzer.encode(0));
console.log(fuzzer.encode(1));
console.log(fuzzer.encode(2));
console.log(fuzzer.encode(493));
Types Supported
Currently supports (and their nested closure):
t.array
t.boolean
t.exact
t.Int
t.intersection
t.keyof
t.literal
t.null
t.number
t.partial
t.readonly
t.readonlyArray
t.string
t.tuple
t.type
(interface)t.undefined
t.union
t.unknown
t.UnknownArray
t.void
Use Cases
Generating Conforming Examples and Verifying Decoder Behavior
Given a d = t.Decoder<I,A>
(aka a t.Type
), fuzz.exampleGenerator
will
build a t.Encoder<number,A>
that will give example instances of A
.
The example instances should all pass on d.decode
, which should return
an identical example. No exceptions should be thrown.
Configuring Core Fuzzers
The FluentRegistry
interface lets you easily change certain core
fuzzers, currently:
- maximum array length (
array
, readonlyArray
, UnknownArray
) - extra properties inserted into
partial
and type
(interface) objects - type used to fuzz
unknown
types
Fuzzing a Type (TODO)
License
Read the LICENSE for details.
The entire NOTICE file serves as the NOTICE that must be included under
Section 4d of the License.
# io-ts-fuzzer
This product contains software originally developed by Holvonix LLC.
Original Repository: https://github.com/holvonix-open/io-ts-fuzzer
Copyright (c) 2019 Holvonix LLC. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this software except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Third-party dependencies may have their own licenses.