github.com/cloudfoundry/libcfbuildpack@v1.91.23/logger/logger_test.go (about)

     1  /*
     2   * Copyright 2018-2020 the original author or authors.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *      https://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package logger_test
    18  
    19  import (
    20  	"bytes"
    21  	"fmt"
    22  	"testing"
    23  
    24  	bp "github.com/buildpack/libbuildpack/logger"
    25  	"github.com/cloudfoundry/libcfbuildpack/logger"
    26  	"github.com/fatih/color"
    27  	"github.com/onsi/gomega"
    28  	"github.com/sclevine/spec"
    29  	"github.com/sclevine/spec/report"
    30  )
    31  
    32  func TestLogger(t *testing.T) {
    33  	spec.Run(t, "Logger", func(t *testing.T, _ spec.G, it spec.S) {
    34  
    35  		g := gomega.NewWithT(t)
    36  
    37  		it("writes title with format", func() {
    38  			var info bytes.Buffer
    39  
    40  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
    41  			logger.Title(metadata{"test-name", 1})
    42  
    43  			g.Expect(info.String()).
    44  				To(gomega.Equal(fmt.Sprintf("\n%s %s\n", color.New(color.FgBlue, color.Bold).Sprint("test-name"),
    45  					color.New(color.FgBlue).Sprint("1"))))
    46  		})
    47  
    48  		it("writes header with format", func() {
    49  			var info bytes.Buffer
    50  
    51  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
    52  			logger.Header("test-header")
    53  
    54  			g.Expect(info.String()).To(gomega.Equal("  test-header\n"))
    55  		})
    56  
    57  		it("writes header error with format", func() {
    58  			var info bytes.Buffer
    59  
    60  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
    61  			logger.HeaderError("test-header")
    62  
    63  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("  %s\n", color.New(color.FgRed, color.Bold).Sprint("test-header"))))
    64  		})
    65  
    66  		it("writes header warning with format", func() {
    67  			var info bytes.Buffer
    68  
    69  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
    70  			logger.HeaderWarning("test-header")
    71  
    72  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("  %s\n", color.New(color.FgYellow, color.Bold).Sprint("test-header"))))
    73  		})
    74  
    75  		it("writes body with format", func() {
    76  			var info bytes.Buffer
    77  
    78  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
    79  			logger.Body("test-body-1\ntest-body-2")
    80  
    81  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("%s\n", color.New(color.Faint).Sprint("    test-body-1\n    test-body-2"))))
    82  		})
    83  
    84  		it("writes body error with format", func() {
    85  			var info bytes.Buffer
    86  
    87  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
    88  			logger.BodyError("test-body-1\ntest-body-2")
    89  
    90  			actual := info.String()
    91  			expected := fmt.Sprintf("%s\n", color.New(color.Faint).Sprintf("    %s\x1b[%dm", color.New(color.FgRed, color.Bold).Sprint("test-body-1\n    test-body-2"), color.Faint))
    92  			g.Expect(actual).To(gomega.Equal(expected))
    93  		})
    94  
    95  		it("writes body with indent", func() {
    96  			logger := logger.Logger{Logger: bp.NewLogger(nil, nil)}
    97  			s := logger.BodyIndent("test-body-1\ntest-body-2")
    98  
    99  			g.Expect(s).To(gomega.Equal("    test-body-1\n    test-body-2"))
   100  		})
   101  
   102  		it("writes launch configuration", func() {
   103  			var info bytes.Buffer
   104  
   105  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   106  			logger.LaunchConfiguration("test-message", "test-default")
   107  
   108  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("%s\n", color.New(color.Faint).Sprintf("    test-message. Default %s\x1b[%dm", color.New(color.Italic).Sprint("test-default"), color.Faint))))
   109  		})
   110  
   111  		it("writes body warning with format", func() {
   112  			var info bytes.Buffer
   113  
   114  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   115  			logger.BodyWarning("test-body-1\ntest-body-2")
   116  
   117  			actual := info.String()
   118  			expected := fmt.Sprintf("%s\n", color.New(color.Faint).Sprintf("    %s\x1b[%dm", color.New(color.FgYellow, color.Bold).Sprint("test-body-1\n    test-body-2"), color.Faint))
   119  			g.Expect(actual).To(gomega.Equal(expected))
   120  		})
   121  
   122  		it("writes terminal error with format", func() {
   123  			var info bytes.Buffer
   124  
   125  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   126  			logger.TerminalError(metadata{"test-name", 1}, "test-error")
   127  
   128  			g.Expect(info.String()).
   129  				To(gomega.Equal(fmt.Sprintf("\n%s %s\n  %s\n", color.New(color.FgRed, color.Bold).Sprint("test-name"),
   130  					color.New(color.FgRed).Sprint("1"), color.New(color.FgRed, color.Bold).Sprint("test-error"))))
   131  		})
   132  
   133  		it("writes eye catcher on first line", func() {
   134  			var info bytes.Buffer
   135  
   136  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   137  			logger.FirstLine("test %s", "message")
   138  
   139  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("%s test message\n", color.New(color.FgRed, color.Bold).Sprint("----->"))))
   140  		})
   141  
   142  		it("writes eye catcher on warning", func() {
   143  			var info bytes.Buffer
   144  
   145  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   146  			logger.Warning("test %s", "message")
   147  
   148  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("%s test message\n", color.New(color.FgYellow, color.Bold).Sprint("----->"))))
   149  		})
   150  
   151  		it("writes eye catcher on error", func() {
   152  			var info bytes.Buffer
   153  
   154  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   155  			logger.Error("test %s", "message")
   156  
   157  			g.Expect(info.String()).To(gomega.Equal(fmt.Sprintf("%s test message\n", color.New(color.FgRed, color.Bold).Sprint("----->"))))
   158  		})
   159  
   160  		it("writes indent on second line", func() {
   161  			var info bytes.Buffer
   162  
   163  			logger := logger.Logger{Logger: bp.NewLogger(nil, &info)}
   164  			logger.SubsequentLine("test %s", "message")
   165  
   166  			g.Expect(info.String()).To(gomega.Equal("       test message\n"))
   167  		})
   168  	}, spec.Report(report.Terminal{}))
   169  }
   170  
   171  type metadata struct {
   172  	Alpha string
   173  	Bravo int
   174  }
   175  
   176  func (m metadata) Identity() (string, string) {
   177  	return m.Alpha, fmt.Sprintf("%d", m.Bravo)
   178  }