ctxfactory

package module
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 17, 2025 License: MIT Imports: 3 Imported by: 0

README

ctxfactory

CI pkg.go.dev

Minimal Factory-style context builder for Go tests.
Easily set defaults, overrides, and skips for context.Context.

Install

go get github.com/shiiyan/ctxfactory

Usage

package main

import (
    "context"
    "fmt"
    "time"

    "github.com/shiiyan/ctxfactory"
)

type ctxKey string

var userKey = ctxKey("user")

type User struct {
    ID       int
    Name     string
    Location string
}

func main() {
    f := ctxfactory.New(map[any]any{
        userKey:  User{ID: 0, Name: "guest", Location: "unknown"},
        "traceID": "default-trace", // string key is allowed but less safe
    })

    // Default context (uses context.Background())
    ctx1 := f.Build()
    u := ctx1.Value(userKey).(User)

    // Override a default (fluent With then Build)
    ctx2 := f.With(map[any]any{
        userKey: User{ID: 42, Name: "Alice", Location: "SF"},
    }).Build()
    u2 := ctx2.Value(userKey).(User)

    // Skip a default key when building
    ctx3 := f.Skip("traceID").Build()

    // Build using an existing base context
    base := context.WithValue(context.Background(), "requestID", "req-123")
    ctx4 := f.BuildWith(base)

    // Build with timeout (caller must call cancel)
    ctx5, cancel := f.BuildWithTimeout(nil, 200*time.Millisecond)
    defer cancel()
    _ = ctx5

    // Build with cancel
    ctx6, cancel2 := f.BuildWithCancel(nil)
    _ = ctx6
    cancel2()
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ContextFactory

type ContextFactory struct {
	// contains filtered or unexported fields
}

func New added in v0.1.2

func New(defaults map[any]any) *ContextFactory

New creates a context factory with arbitrary default values.

func (*ContextFactory) Build

func (f *ContextFactory) Build() context.Context

Build constructs a context from defaults and overrides, honoring skips.

func (*ContextFactory) BuildWith

func (f *ContextFactory) BuildWith(base context.Context) context.Context

BuildWith constructs a context using the provided base context.

func (*ContextFactory) BuildWithCancel

func (f *ContextFactory) BuildWithCancel(base context.Context) (context.Context, context.CancelFunc)

BuildWithCancel wraps the built context with a cancel function.

func (*ContextFactory) BuildWithDeadline

func (f *ContextFactory) BuildWithDeadline(base context.Context, deadline time.Time) (context.Context, context.CancelFunc)

BuildWithDeadline wraps the built context with a deadline and returns the cancel func.

func (*ContextFactory) BuildWithTimeout

func (f *ContextFactory) BuildWithTimeout(base context.Context, d time.Duration) (context.Context, context.CancelFunc)

BuildWithTimeout wraps the built context with a timeout and returns the cancel func.

func (*ContextFactory) Skip

func (f *ContextFactory) Skip(keys ...any) *ContextFactory

Skip marks keys to omit from applying defaults.

func (*ContextFactory) With

func (f *ContextFactory) With(overrides map[any]any) *ContextFactory

With merges overrides into the factory and returns the same factory for fluent use.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL