diff --git a/commands/gendoc.go b/commands/gendoc.go index 3446c2622..8312191f2 100644 --- a/commands/gendoc.go +++ b/commands/gendoc.go @@ -66,7 +66,7 @@ for rendering in Hugo.`, return err } } - now := time.Now().Format(time.RFC3339) + now := time.Now().Format("2006-01-02") prepender := func(filename string) string { name := filepath.Base(filename) base := strings.TrimSuffix(name, path.Ext(name)) diff --git a/commands/server.go b/commands/server.go index 6ede49417..5500526e8 100644 --- a/commands/server.go +++ b/commands/server.go @@ -39,6 +39,11 @@ import ( ) type serverCmd struct { + // Can be used to stop the server. Useful in tests + stop <-chan bool + // Can be used to receive notification about when the server is started. Useful in tests. + started chan<- bool + disableLiveReload bool navigateToChanged bool renderToDisk bool @@ -55,7 +60,11 @@ type serverCmd struct { } func newServerCmd() *serverCmd { - cc := &serverCmd{} + return newServerCmdSignaled(nil, nil) +} + +func newServerCmdSignaled(stop <-chan bool, started chan<- bool) *serverCmd { + cc := &serverCmd{stop: stop, started: started} cc.baseBuilderCmd = newBuilderCmd(&cobra.Command{ Use: "server", @@ -394,9 +403,20 @@ func (c *commandeer) serve(s *serverCmd) error { }() } + if s.started != nil { + s.started <- true + } + jww.FEEDBACK.Println("Press Ctrl+C to stop") - <-sigs + if s.stop != nil { + select { + case <-sigs: + case <-s.stop: + } + } else { + <-sigs + } return nil } diff --git a/commands/server_test.go b/commands/server_test.go index 8940eb078..b17addf6b 100644 --- a/commands/server_test.go +++ b/commands/server_test.go @@ -14,11 +14,60 @@ package commands import ( + "fmt" + "net/http" + "os" "testing" + "time" + + "github.com/gohugoio/hugo/helpers" "github.com/spf13/viper" + "github.com/stretchr/testify/require" ) +func TestServer(t *testing.T) { + assert := require.New(t) + dir, err := createSimpleTestSite(t) + assert.NoError(err) + + // Let us hope that this port is available on all systems ... + port := 1331 + + defer func() { + os.RemoveAll(dir) + }() + + stop, started := make(chan bool), make(chan bool) + + scmd := newServerCmdSignaled(stop, started) + + cmd := scmd.getCommand() + cmd.SetArgs([]string{"-s=" + dir, fmt.Sprintf("-p=%d", port)}) + + go func() { + _, err = cmd.ExecuteC() + assert.NoError(err) + }() + + select { + case <-started: + case <-time.After(2 * time.Second): + t.Fatal("server start took too long") + } + + resp, err := http.Get("http://localhost:1331/") + assert.NoError(err) + defer resp.Body.Close() + homeContent := helpers.ReaderToString(resp.Body) + + assert.Contains(homeContent, "List: Hugo Commands") + + // Stop the server. + stop <- true + +} + func TestFixURL(t *testing.T) { type data struct { TestName string