github.com/wtsi-hgi/go-softpack-builder@v1.8.1/internal/tests/tests.go (about) 1 /******************************************************************************* 2 * Copyright (c) 2023 Genome Research Ltd. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining 5 * a copy of this software and associated documentation files (the 6 * "Software"), to deal in the Software without restriction, including 7 * without limitation the rights to use, copy, modify, merge, publish, 8 * distribute, sublicense, and/or sell copies of the Software, and to 9 * permit persons to whom the Software is furnished to do so, subject to 10 * the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included 13 * in all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 ******************************************************************************/ 23 24 package tests 25 26 import ( 27 "embed" 28 "strings" 29 "sync" 30 ) 31 32 //go:embed testdata 33 var TestData embed.FS 34 35 // ConcurrentStringBuilder should be used when testing slog logging: 36 // 37 // var logWriter internal.ConcurrentStringBuilder 38 // slog.SetDefault(slog.New(slog.NewTextHandler(&logWriter, nil))) 39 type ConcurrentStringBuilder struct { 40 mu sync.RWMutex 41 strings.Builder 42 } 43 44 // Write is for implementing io.Writer. 45 func (c *ConcurrentStringBuilder) Write(p []byte) (int, error) { 46 c.mu.Lock() 47 defer c.mu.Unlock() 48 49 return c.Builder.Write(p) 50 } 51 52 // WriteString is for implementing io.Writer. 53 func (c *ConcurrentStringBuilder) WriteString(str string) (int, error) { 54 c.mu.Lock() 55 defer c.mu.Unlock() 56 57 return c.Builder.WriteString(str) 58 } 59 60 // String returns the current logs messages as a string. 61 func (c *ConcurrentStringBuilder) String() string { 62 c.mu.RLock() 63 defer c.mu.RUnlock() 64 65 return c.Builder.String() 66 }