diff --git a/.travis.yml b/.travis.yml index bf43e9b..31ff173 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,33 @@ +dist: bionic language: go go: - - 1.7 - - 1.8 + - "1.11" + +services: + - docker + before_install: - go get github.com/mattn/goveralls + install: - make setup - make build + script: - make test - - bash scripts/cover.sh + # Coveralls is down for maintenance currently + # - bash scripts/cover.sh + +jobs: + include: + - stage: Build, Unit-Tests & Fuzz-Tests + if: branch = master AND type IN (pull_request) + go: 1.12.x + script: + - bash scripts/fuzzit.sh regression + + - stage: Fuzzit (Fuzzing) + if: branch = master AND type IN (push) + go: 1.12.x + script: + - bash scripts/fuzzit.sh fuzzing diff --git a/README.md b/README.md index a889675..8f8ce01 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# prose [![Build Status](https://travis-ci.org/jdkato/prose.svg?branch=master)](https://travis-ci.org/jdkato/prose) [![Build status](https://ci.appveyor.com/api/projects/status/24bepq85nnnk4scr/branch/v2?svg=true)](https://ci.appveyor.com/project/jdkato/prose/branch/v2) [![GoDoc](https://godoc.org/github.com/golang/gddo?status.svg)](https://godoc.org/gopkg.in/jdkato/prose.v2) [![Coverage Status](https://coveralls.io/repos/github/jdkato/prose/badge.svg?branch=v2)](https://coveralls.io/github/jdkato/prose?branch=v2) [![Go Report Card](https://goreportcard.com/badge/github.com/jdkato/prose)](https://goreportcard.com/report/github.com/jdkato/prose) [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/avelino/awesome-go#natural-language-processing) +# prose [![Build Status](https://travis-ci.org/jdkato/prose.svg?branch=master)](https://travis-ci.org/jdkato/prose) [![fuzzit](https://app.fuzzit.dev/badge?org_id=prose=master)](https://fuzzit.dev) [![GoDoc](https://godoc.org/github.com/golang/gddo?status.svg)](https://godoc.org/gopkg.in/jdkato/prose.v2) [![Coverage Status](https://coveralls.io/repos/github/jdkato/prose/badge.svg?branch=v2)](https://coveralls.io/github/jdkato/prose?branch=v2) [![Go Report Card](https://goreportcard.com/badge/github.com/jdkato/prose)](https://goreportcard.com/report/github.com/jdkato/prose) [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/avelino/awesome-go#natural-language-processing) `prose` is a natural language processing library (English only) in *pure Go*. It supports tokenization, segmentation, part-of-speech tagging, and named-entity extraction. diff --git a/scripts/fuzzit.sh b/scripts/fuzzit.sh new file mode 100644 index 0000000..6d41170 --- /dev/null +++ b/scripts/fuzzit.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# +# Helper script for working with fuzzit.dev: +# +# https://github.com/fuzzitdev/example-go +# +# Based on: +# +# https://github.com/google/syzkaller/blob/master/fuzzit.sh +set -eux + +function target { + go-fuzz-build -libfuzzer -func $3 -o fuzzer.a $2 + clang -fsanitize=fuzzer fuzzer.a -o fuzzer + + ./fuzzit create target $1 || true + ./fuzzit create job $LOCAL --type fuzzing --branch $TRAVIS_BRANCH --revision $TRAVIS_COMMIT prose/$1 ./fuzzer +} + +go get -u github.com/dvyukov/go-fuzz/go-fuzz-build +wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.12/fuzzit_Linux_x86_64 +chmod a+x fuzzit +if [ "$1" = "fuzzing" ]; then + ./fuzzit auth $FUZZIT_API_KEY + export LOCAL="" +else + export LOCAL="--local" +fi + +target prose-transform ./transform Fuzz diff --git a/transform/transform.go b/transform/transform.go index 54ae099..f97875b 100644 --- a/transform/transform.go +++ b/transform/transform.go @@ -78,5 +78,9 @@ break } } - return strings.TrimSpace(string(unicode.ToLower(first)) + Pascal(s)[1:]) + body := Pascal(s) + if len(body) > 1 { + return strings.TrimSpace(string(unicode.ToLower(first)) + body[1:]) + } + return s } diff --git a/transform/transform_fuzz.go b/transform/transform_fuzz.go new file mode 100644 index 0000000..0254027 --- /dev/null +++ b/transform/transform_fuzz.go @@ -0,0 +1,22 @@ +// +build gofuzz + +package transform + +func Fuzz(data []byte) int { + s := string(data) + + // Case transformations + Simple(s) + Snake(s) + Dash(s) + Dot(s) + Constant(s) + Pascal(s) + Camel(s) + + // Title converters + tc := NewTitleConverter(APStyle) + tc.Title(s) + + return 0 +}