From c5373ea0cd4b166661c73a103529b13bf9e6ea96 Mon Sep 17 00:00:00 2001 From: alessio Date: Fri, 11 Aug 2017 21:00:56 +0200 Subject: [PATCH 01/18] additional info --- README.md | 55 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index a857e76..f4ab2da 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,10 @@ #### Realize is the Go tool that is focused to speed up and improve developers workflow. -Automate your work pipeline, integrate additional tools of third party, define custom cli commands and reload projects at each changed without stop to write code. +Automate the most recurring operations needed for development, define what you need only one time, integrate additional tools of third party, define custom cli commands and reload projects at each file change without stop to write code. + +Various operations can be programmed for each project, which can be executed at startup, at stop, and at each file change. +

@@ -22,19 +25,22 @@ Automate your work pipeline, integrate additional tools of third party, define c #### Features -- Highly customizable -- Setup step by step -- Live reload -- Support for multiple projects -- Save logs on files -- Web panel for a smart view -- Build, install, run, test, fmt, generate, vet and much more -- Watch custom paths and specific file extensions -- Multiple watching methods (Polling, File watcher) -- Docker support +- Two watcher types: file system and polling +- Logs and errors files +- Projects setup step by step +- After/Before custom commands +- Custom environment variables +- Multiple projects at the same time +- Custom arguments to pass at each project +- Docker support (only with polling watcher) +- Live reload on file change (extensions and paths customizable) +- Support for most go commands (install, build, run, vet, test, fmt and much more) +- Web panel for a smart control of the workflow v 1.5 +- [ ] Use cases +- [ ] Tests - [ ] Watch gopath dependencies - [ ] Web panel, download logs - [ ] Multiple configurations (dev, production) @@ -44,12 +50,12 @@ v 1.5 #### Wiki - [Getting Started](#installation) +- [Config sample](#config-sample) - Sample config file - [Run cmd](#run) - Run a project - [Add cmd](#add) - Add a new project - [Init cmd](#init) - Make a custom config step by step - [Remove cmd](#remove) - Remove a project - [List cmd](#list) - List the projects -- [Config sample](#config-sample) - Sample config file - [Support](#support-us-and-suggest-an-improvement) @@ -58,7 +64,7 @@ Run this to get/install: ``` $ go get github.com/tockins/realize ``` -#### Commands +#### Commands available - ##### Run From project/projects root execute: @@ -146,10 +152,10 @@ $ go get github.com/tockins/realize ``` settings: - legacy: - status: true // legacy watch status + legacy: + status: true // enable polling watcher instead fsnotifiy interval: 10s // polling interval - resources: // files names related to streams + resources: // files names outputs: outputs.log logs: logs.log errors: errors.log @@ -161,10 +167,10 @@ $ go get github.com/tockins/realize projects: - name: coin path: coin // project path - environment: // env variables + environment: // env variables available at startup test: test myvar: value - commands: + commands: // go commands supported vet: true fmt: true test: false @@ -173,10 +179,10 @@ $ go get github.com/tockins/realize status: true build: status: false - args: + args: // additional params for the command - -race run: true - args: + args: // arguments to pass at the project - --myarg watcher: preview: false // watched files preview @@ -186,16 +192,15 @@ $ go get github.com/tockins/realize - vendor exts: // watched extensions - .go - scripts: - - type: before // type + scripts: // custom scripts + - type: before // type (after/before) command: ./ls -l // command - changed: true // relaunch when a file changes + changed: true // relaunch when a file change startup: true // launch at start - type: after command: ./ls changed: true - streams: // enable/disable streams - cli_out: true + streams: // save logs/errors/outputs on files file_out: false file_log: false file_err: false From 996633ef54288d91d4df747e1714ec8729bfe4b8 Mon Sep 17 00:00:00 2001 From: alessio Date: Fri, 11 Aug 2017 21:03:58 +0200 Subject: [PATCH 02/18] style test --- style/style_test.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 style/style_test.go diff --git a/style/style_test.go b/style/style_test.go new file mode 100644 index 0000000..b424576 --- /dev/null +++ b/style/style_test.go @@ -0,0 +1,34 @@ +package style + +import ( + "testing" + "fmt" +) + +func TestColorBase_Regular(t *testing.T) { + c := new(colorBase) + strs := []string{"a", "b", "c"} + input := make([]interface{}, len(strs)) + result := c.Bold(input) + expected := fmt.Sprint(input) + for i, s := range strs { + input[i] = s + } + if result != expected{ + t.Error("Expected:", expected, "instead", result) + } +} + +func TestColorBase_Bold(t *testing.T) { + c := new(colorBase) + strs := []string{"a", "b", "c"} + input := make([]interface{}, len(strs)) + result := c.Bold(input) + expected := fmt.Sprint(input) + for i, s := range strs { + input[i] = s + } + if result != expected{ + t.Error("Expected:", expected, "instead", result) + } +} \ No newline at end of file From 4cea2e90d8073da0743e50f04ffa98f977cdfa77 Mon Sep 17 00:00:00 2001 From: alessio Date: Fri, 11 Aug 2017 21:48:54 +0200 Subject: [PATCH 03/18] wiki moved --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4d9eb31..457a0a6 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,18 @@ Various operations can be programmed for each project, which can be executed at

+#### Wiki + +- [Getting Started](#installation) +- [Config sample](#config-sample) - Sample config file +- [Run cmd](#run) - Run a project +- [Add cmd](#add) - Add a new project +- [Init cmd](#init) - Make a custom config step by step +- [Remove cmd](#remove) - Remove a project +- [List cmd](#list) - List the projects +- [Support](#support-us-and-suggest-an-improvement) +- [Backers and Sponsors](#backers) + #### Features - Two watcher types: file system and polling @@ -49,18 +61,6 @@ v 1.5 - [ ] Support to ignore paths and files in gititnore - [ ] Input redirection (wait for an input and redirect) -#### Wiki - -- [Getting Started](#installation) -- [Config sample](#config-sample) - Sample config file -- [Run cmd](#run) - Run a project -- [Add cmd](#add) - Add a new project -- [Init cmd](#init) - Make a custom config step by step -- [Remove cmd](#remove) - Remove a project -- [List cmd](#list) - List the projects -- [Support](#support-us-and-suggest-an-improvement) -- [Backers and Sponsors](#backers) - #### Installation Run this to get/install: ``` From 79b637b05952a1ff502180407be3be479cdba582 Mon Sep 17 00:00:00 2001 From: alessio Date: Fri, 11 Aug 2017 21:50:19 +0200 Subject: [PATCH 04/18] features link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 457a0a6..44bcfbf 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Various operations can be programmed for each project, which can be executed at #### Wiki +- [Features list](#features) - [Getting Started](#installation) - [Config sample](#config-sample) - Sample config file - [Run cmd](#run) - Run a project From a26b5054738be9245087a89cd76fb8756ffbe098 Mon Sep 17 00:00:00 2001 From: alessio Date: Fri, 11 Aug 2017 22:24:18 +0200 Subject: [PATCH 05/18] golint --- settings/settings.go | 1 + watcher/main.go | 3 ++- watcher/utils.go | 3 +-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/settings/settings.go b/settings/settings.go index 450b5c1..5f43106 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -6,6 +6,7 @@ import ( "time" ) +// realize hidden dir var Dir = ".realize/" // Settings defines a group of general settings diff --git a/watcher/main.go b/watcher/main.go index 79eb154..fd57bd8 100644 --- a/watcher/main.go +++ b/watcher/main.go @@ -59,6 +59,7 @@ type tool struct { name string } +// Cmds go supported type Cmds struct { Vet bool `yaml:"vet" json:"vet"` Fmt bool `yaml:"fmt" json:"fmt"` @@ -69,7 +70,7 @@ type Cmds struct { Run bool `yaml:"run" json:"run"` } -// Buildmode options +// Cmd buildmode options type Cmd struct { Status bool `yaml:"status" json:"status"` Args []string `yaml:"args,omitempty" json:"args,omitempty"` diff --git a/watcher/utils.go b/watcher/utils.go index 4509080..714688e 100644 --- a/watcher/utils.go +++ b/watcher/utils.go @@ -54,7 +54,6 @@ func getEnvPath(env string) string { path := filepath.SplitList(os.Getenv(env)) if len(path) == 0 { return "" - } else { - return path[0] } + return path[0] } From bd9435693c14d03d2c3ae914e96d86104475b244 Mon Sep 17 00:00:00 2001 From: alessio Date: Sat, 12 Aug 2017 19:48:06 +0200 Subject: [PATCH 06/18] settings tests --- realize.go | 6 ++--- settings/flimit_test.go | 13 +++++++++ settings/io.go | 10 +++---- settings/io_test.go | 43 +++++++++++++++++++++++++++++ settings/settings.go | 29 +++++++++++--------- settings/settings_test.go | 51 +++++++++++++++++++++++++++++++++++ settings/utils.go | 2 +- settings/utils_test.go | 57 +++++++++++++++++++++++++++++++++++++++ 8 files changed, 190 insertions(+), 21 deletions(-) create mode 100644 settings/flimit_test.go create mode 100755 settings/io_test.go create mode 100644 settings/settings_test.go create mode 100644 settings/utils_test.go diff --git a/realize.go b/realize.go index 5f9cb92..6c84e42 100644 --- a/realize.go +++ b/realize.go @@ -196,7 +196,7 @@ func main() { Questions: []*interact.Question{ { Before: func(d interact.Context) error { - if _, err := os.Stat(settings.Dir + config); err != nil { + if _, err := os.Stat(settings.Directory + config); err != nil { d.Skip() } d.SetDef(false, style.Green.Regular("(n)")) @@ -894,7 +894,7 @@ func main() { }, After: func(d interact.Context) error { if val, _ := d.Qns().Get(0).Ans().Bool(); val { - actErr = r.Settings.Remove() + actErr = r.Settings.Remove(settings.Directory) if actErr != nil { return actErr } @@ -946,7 +946,7 @@ func main() { Aliases: []string{"c"}, Description: "Remove realize folder.", Action: func(p *cli.Context) error { - if err := r.Settings.Remove(); err != nil { + if err := r.Settings.Remove(settings.Directory); err != nil { return err } fmt.Println(style.Yellow.Bold("[")+"REALIZE"+style.Yellow.Bold("]"), style.Green.Bold("Realize folder successfully removed.")) diff --git a/settings/flimit_test.go b/settings/flimit_test.go new file mode 100644 index 0000000..da97e34 --- /dev/null +++ b/settings/flimit_test.go @@ -0,0 +1,13 @@ +package settings + +import ( + "testing" +) + +func TestSettings_Flimit(t *testing.T) { + s := Settings{} + s.Config.Flimit = 1 + if err := s.Flimit(); err != nil { + t.Error("Unable to increase limit", err) + } +} diff --git a/settings/io.go b/settings/io.go index d622ee8..2124117 100644 --- a/settings/io.go +++ b/settings/io.go @@ -17,21 +17,21 @@ func (s Settings) Stream(file string) ([]byte, error) { return content, err } -// Write a file given a name and a byte stream +// Write a file func (s Settings) Write(name string, data []byte) error { - err := ioutil.WriteFile(name, data, 0655) + err := ioutil.WriteFile(name, data, Permission) return s.Validate(err) } // Create a new file and return its pointer func (s Settings) Create(path string, name string) *os.File { var file string - if _, err := os.Stat(Dir); err == nil { - file = filepath.Join(path, Dir, name) + if _, err := os.Stat(Directory); err == nil { + file = filepath.Join(path, Directory, name) } else { file = filepath.Join(path, name) } - out, err := os.OpenFile(file, os.O_APPEND|os.O_WRONLY|os.O_CREATE|os.O_SYNC, 0655) + out, err := os.OpenFile(file, os.O_APPEND|os.O_WRONLY|os.O_CREATE|os.O_SYNC, Permission) s.Validate(err) return out } diff --git a/settings/io_test.go b/settings/io_test.go new file mode 100755 index 0000000..a45d6e0 --- /dev/null +++ b/settings/io_test.go @@ -0,0 +1,43 @@ +package settings + +import ( + "github.com/labstack/gommon/random" + "io/ioutil" + "os" + "testing" +) + +func TestSettings_Stream(t *testing.T) { + s := Settings{} + filename := random.String(4) + if _, err := s.Stream(filename); err == nil { + t.Fatal("Error expected, none found", filename, err) + } + + filename = "io.go" + if _, err := s.Stream(filename); err != nil { + t.Fatal("Error unexpected", filename, err) + } +} + +func TestSettings_Write(t *testing.T) { + s := Settings{} + data := "abcdefgh" + d, err := ioutil.TempFile("", "io_test") + if err != nil { + t.Fatal(err) + } + if err := s.Write(d.Name(), []byte(data)); err != nil { + t.Fatal(err) + } +} + +func TestSettings_Create(t *testing.T) { + s := Settings{} + p, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + f := s.Create(p, "io_test") + os.Remove(f.Name()) +} diff --git a/settings/settings.go b/settings/settings.go index 5f43106..2812352 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -6,8 +6,11 @@ import ( "time" ) -// realize hidden dir -var Dir = ".realize/" +// settings const +const ( + Permission = 0775 + Directory = ".realize/" +) // Settings defines a group of general settings type Settings struct { @@ -48,15 +51,16 @@ type Resources struct { // Read from config file func (s *Settings) Read(out interface{}) error { localConfigPath := s.Resources.Config - if _, err := os.Stat(Dir + s.Resources.Config); err == nil { - localConfigPath = Dir + s.Resources.Config + // backward compatibility + if _, err := os.Stat(Directory + s.Resources.Config); err == nil { + localConfigPath = Directory + s.Resources.Config } content, err := s.Stream(localConfigPath) if err == nil { err = yaml.Unmarshal(content, out) return err } - return nil + return err } // Record create and unmarshal the yaml config file @@ -66,20 +70,21 @@ func (s *Settings) Record(out interface{}) error { if err != nil { return err } - if _, err := os.Stat(Dir); os.IsNotExist(err) { - if err = os.Mkdir(Dir, 0770); err != nil { + if _, err := os.Stat(Directory); os.IsNotExist(err) { + if err = os.Mkdir(Directory, Permission); err != nil { return s.Write(s.Resources.Config, y) } } - return s.Write(Dir+s.Resources.Config, y) + return s.Write(Directory+s.Resources.Config, y) } return nil } // Remove realize folder -func (s *Settings) Remove() error { - if _, err := os.Stat(Dir); !os.IsNotExist(err) { - return os.RemoveAll(Dir) +func (s *Settings) Remove(d string) error { + _, err := os.Stat(d) + if !os.IsNotExist(err) { + return os.RemoveAll(d) } - return nil + return err } diff --git a/settings/settings_test.go b/settings/settings_test.go new file mode 100644 index 0000000..f55ce9d --- /dev/null +++ b/settings/settings_test.go @@ -0,0 +1,51 @@ +package settings + +import ( + "io/ioutil" + "path/filepath" + "testing" +) + +func TestSettings_Read(t *testing.T) { + s := Settings{} + var a interface{} + s.Resources.Config = "settings_b" + if err := s.Read(a); err == nil { + t.Error("Error unexpected", err) + } + + s.Resources.Config = "settings_test.yaml" + d, err := ioutil.TempFile("", "settings_test.yaml") + if err != nil { + t.Fatal(err) + } + s.Resources.Config = d.Name() + if err := s.Read(a); err != nil { + t.Error("Error unexpected", err) + } +} + +func TestSettings_Remove(t *testing.T) { + s := Settings{} + if err := s.Remove("abcd"); err == nil { + t.Error("Error unexpected, dir dosn't exist", err) + } + + d, err := ioutil.TempDir("", "settings_test") + if err != nil { + t.Error(err) + } + if err := s.Remove(d); err != nil { + t.Error("Error unexpected, dir exist", err) + } +} + +func TestSettings_Record(t *testing.T) { + s := Settings{} + s.Resources.Config = "settings_test.yaml" + var a interface{} + if err := s.Record(a); err != nil { + t.Error(err) + } + s.Remove(filepath.Join(Directory, s.Resources.Config)) +} diff --git a/settings/utils.go b/settings/utils.go index 88ee87a..bf2a41a 100644 --- a/settings/utils.go +++ b/settings/utils.go @@ -9,7 +9,7 @@ import ( "github.com/tockins/realize/style" ) -// Wdir return the current working directory +// Wdir return the current working Directory func (s Settings) Wdir() string { dir, err := os.Getwd() s.Validate(err) diff --git a/settings/utils_test.go b/settings/utils_test.go new file mode 100644 index 0000000..44ccce8 --- /dev/null +++ b/settings/utils_test.go @@ -0,0 +1,57 @@ +package settings + +import ( + "errors" + "github.com/labstack/gommon/random" + "os" + "path/filepath" + "strings" + "testing" +) + +func TestSettings_Wdir(t *testing.T) { + s := Settings{} + expected, err := os.Getwd() + if err != nil { + t.Error(err) + } + result := s.Wdir() + if result != filepath.Base(expected) { + t.Error("Expected", filepath.Base(expected), "instead", result) + } +} + +func TestSettings_Validate(t *testing.T) { + s := Settings{} + input := errors.New("") + input = nil + if err := s.Validate(input); err != nil { + t.Error("Expected", input, "instead", err) + } +} + +func TestSettings_Name(t *testing.T) { + s := Settings{} + name := random.String(8) + path := random.String(5) + dir, err := os.Getwd() + if err != nil { + t.Error(err) + } + result := s.Name(name, path) + if result != dir && result != filepath.Base(path) { + t.Error("Expected", dir, "or", filepath.Base(path), "instead", result) + } + +} + +func TestSettings_Path(t *testing.T) { + s := Settings{} + path := random.String(5) + expected := strings.Replace(filepath.Clean(path), "\\", "/", -1) + result := s.Path(path) + if result != expected { + t.Error("Expected", expected, "instead", result) + } + +} From 4c18e2a630500312dd8d25e7acfe5977d051e69f Mon Sep 17 00:00:00 2001 From: alessio Date: Sun, 13 Aug 2017 00:29:46 +0200 Subject: [PATCH 07/18] from error to fatal --- settings/flimit_test.go | 2 +- settings/settings_test.go | 12 ++++++------ settings/utils_test.go | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/settings/flimit_test.go b/settings/flimit_test.go index da97e34..2863939 100644 --- a/settings/flimit_test.go +++ b/settings/flimit_test.go @@ -8,6 +8,6 @@ func TestSettings_Flimit(t *testing.T) { s := Settings{} s.Config.Flimit = 1 if err := s.Flimit(); err != nil { - t.Error("Unable to increase limit", err) + t.Fatal("Unable to increase limit", err) } } diff --git a/settings/settings_test.go b/settings/settings_test.go index f55ce9d..17a2c77 100644 --- a/settings/settings_test.go +++ b/settings/settings_test.go @@ -11,7 +11,7 @@ func TestSettings_Read(t *testing.T) { var a interface{} s.Resources.Config = "settings_b" if err := s.Read(a); err == nil { - t.Error("Error unexpected", err) + t.Fatal("Error unexpected", err) } s.Resources.Config = "settings_test.yaml" @@ -21,22 +21,22 @@ func TestSettings_Read(t *testing.T) { } s.Resources.Config = d.Name() if err := s.Read(a); err != nil { - t.Error("Error unexpected", err) + t.Fatal("Error unexpected", err) } } func TestSettings_Remove(t *testing.T) { s := Settings{} if err := s.Remove("abcd"); err == nil { - t.Error("Error unexpected, dir dosn't exist", err) + t.Fatal("Error unexpected, dir dosn't exist", err) } d, err := ioutil.TempDir("", "settings_test") if err != nil { - t.Error(err) + t.Fatal(err) } if err := s.Remove(d); err != nil { - t.Error("Error unexpected, dir exist", err) + t.Fatal("Error unexpected, dir exist", err) } } @@ -45,7 +45,7 @@ func TestSettings_Record(t *testing.T) { s.Resources.Config = "settings_test.yaml" var a interface{} if err := s.Record(a); err != nil { - t.Error(err) + t.Fatal(err) } s.Remove(filepath.Join(Directory, s.Resources.Config)) } diff --git a/settings/utils_test.go b/settings/utils_test.go index 44ccce8..5a00f45 100644 --- a/settings/utils_test.go +++ b/settings/utils_test.go @@ -36,11 +36,11 @@ func TestSettings_Name(t *testing.T) { path := random.String(5) dir, err := os.Getwd() if err != nil { - t.Error(err) + t.Fatal(err) } result := s.Name(name, path) if result != dir && result != filepath.Base(path) { - t.Error("Expected", dir, "or", filepath.Base(path), "instead", result) + t.Fatal("Expected", dir, "or", filepath.Base(path), "instead", result) } } @@ -51,7 +51,7 @@ func TestSettings_Path(t *testing.T) { expected := strings.Replace(filepath.Clean(path), "\\", "/", -1) result := s.Path(path) if result != expected { - t.Error("Expected", expected, "instead", result) + t.Fatal("Expected", expected, "instead", result) } } From 8e21c716c7fb3b5e52b793935340fd99e4ddb814 Mon Sep 17 00:00:00 2001 From: alessio Date: Sun, 13 Aug 2017 00:53:17 +0200 Subject: [PATCH 08/18] bytes compare --- style/style_test.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/style/style_test.go b/style/style_test.go index b424576..087b228 100644 --- a/style/style_test.go +++ b/style/style_test.go @@ -1,20 +1,21 @@ package style import ( - "testing" "fmt" + "bytes" + "testing" ) func TestColorBase_Regular(t *testing.T) { c := new(colorBase) strs := []string{"a", "b", "c"} input := make([]interface{}, len(strs)) - result := c.Bold(input) - expected := fmt.Sprint(input) for i, s := range strs { input[i] = s } - if result != expected{ + result := c.Regular(input) + expected := fmt.Sprint(input) + if !bytes.Equal([]byte(result), []byte(expected)){ t.Error("Expected:", expected, "instead", result) } } @@ -23,12 +24,12 @@ func TestColorBase_Bold(t *testing.T) { c := new(colorBase) strs := []string{"a", "b", "c"} input := make([]interface{}, len(strs)) - result := c.Bold(input) - expected := fmt.Sprint(input) for i, s := range strs { input[i] = s } - if result != expected{ + result := c.Bold(input) + expected := fmt.Sprint(input) + if !bytes.Equal([]byte(result), []byte(expected)){ t.Error("Expected:", expected, "instead", result) } -} \ No newline at end of file +} From d12ac06eb4b2ac2292b8dd868cee9db3a40f9e8c Mon Sep 17 00:00:00 2001 From: alessio Date: Mon, 14 Aug 2017 20:02:13 +0200 Subject: [PATCH 09/18] go test --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 56bfc5c..4fc1614 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,4 +12,5 @@ install: - go get ./... script: - - go install . \ No newline at end of file + - go install . + - go test -v ./... \ No newline at end of file From 9ffdf3c77375f63bc9a89838389fc1b38299a535 Mon Sep 17 00:00:00 2001 From: alessio Date: Mon, 14 Aug 2017 20:12:04 +0200 Subject: [PATCH 10/18] test fixed --- settings/flimit_test.go | 2 +- settings/io_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/flimit_test.go b/settings/flimit_test.go index 2863939..4a50752 100644 --- a/settings/flimit_test.go +++ b/settings/flimit_test.go @@ -6,7 +6,7 @@ import ( func TestSettings_Flimit(t *testing.T) { s := Settings{} - s.Config.Flimit = 1 + s.Config.Flimit = 100 if err := s.Flimit(); err != nil { t.Fatal("Unable to increase limit", err) } diff --git a/settings/io_test.go b/settings/io_test.go index a45d6e0..2e55512 100755 --- a/settings/io_test.go +++ b/settings/io_test.go @@ -40,4 +40,4 @@ func TestSettings_Create(t *testing.T) { } f := s.Create(p, "io_test") os.Remove(f.Name()) -} +} \ No newline at end of file From a841339b729532798c60b533e334eea163ec096b Mon Sep 17 00:00:00 2001 From: alessio Date: Mon, 14 Aug 2017 22:17:11 +0200 Subject: [PATCH 11/18] server tests --- server/main.go | 8 +++----- server/main_test.go | 48 +++++++++++++++++++++++++++++++++++++++++++++ server/open.go | 22 ++++++++++----------- server/open_test.go | 28 ++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 server/main_test.go create mode 100644 server/open_test.go diff --git a/server/main.go b/server/main.go index 0e3c726..da6a1fd 100644 --- a/server/main.go +++ b/server/main.go @@ -117,11 +117,9 @@ func (s *Server) Start(p *cli.Context) (err error) { e.GET("/ws", s.projects) go e.Start(string(s.Settings.Server.Host) + ":" + strconv.Itoa(s.Settings.Server.Port)) - if s.Open { - _, err = Open("http://" + string(s.Settings.Server.Host) + ":" + strconv.Itoa(s.Settings.Server.Port)) - if err != nil { - return err - } + _, err = s.OpenURL("http://" + string(s.Settings.Server.Host) + ":" + strconv.Itoa(s.Settings.Server.Port)) + if err != nil { + return err } } return nil diff --git a/server/main_test.go b/server/main_test.go new file mode 100644 index 0000000..a5cc025 --- /dev/null +++ b/server/main_test.go @@ -0,0 +1,48 @@ +package server + +import ( + "testing" + "github.com/tockins/realize/settings" + "net/http" +) + +func TestServer_Start(t *testing.T) { + s := settings.Settings{ + Server: settings.Server{ + Status: true, + Open: false, + Host: "localhost", + Port: 5000, + }, + } + server := Server{ + Settings: &s, + } + err := server.Start(nil) + host := "http://localhost:5000/" + urls := []string{ + host, + host+"ws", + host+"assets/js/all.min.js", + host+"assets/css/app.css", + host+"app/components/settings/index.html", + host+"app/components/project/index.html", + host+"app/components/project/index.html", + host+"app/components/index.html", + host+"assets/img/svg/ic_settings_black_24px.svg", + host+"assets/img/svg/ic_fullscreen_black_24px.svg", + host+"assets/img/svg/ic_add_black_24px.svg", + host+"assets/img/svg/ic_keyboard_backspace_black_24px.svg", + host+"assets/img/svg/ic_error_black_48px.svg", + host+"assets/img/svg/ic_remove_black_24px.svg", + host+"assets/img/svg/logo.svg", + host+"assets/img/favicon-32x32.png", + host+"assets/img/svg/ic_swap_vertical_circle_black_48px.svg", + } + for _, elm := range urls { + _, err = http.Get(elm) + if err != nil { + t.Fatal(err) + } + } +} diff --git a/server/open.go b/server/open.go index 25a436c..57cc62f 100644 --- a/server/open.go +++ b/server/open.go @@ -21,17 +21,17 @@ func init() { } // Open a url in the default browser -func Open(url string) (io.Writer, error) { - goos := runtime.GOOS - open, err := cmd[goos] - if !err { - return nil, fmt.Errorf("operating system %q is not supported", goos) +func (s *Server) OpenURL(url string) (io.Writer, error) { + if s.Open { + open, err := cmd[runtime.GOOS] + if !err { + return nil, fmt.Errorf("operating system %q is not supported", runtime.GOOS) + } + cmd := exec.Command(open, url) + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return cmd.Stderr, err + } } - cmd := exec.Command(open, url) - cmd.Stderr = &stderr - if err := cmd.Run(); err != nil { - return cmd.Stderr, err - } - return nil, nil } diff --git a/server/open_test.go b/server/open_test.go new file mode 100644 index 0000000..bb582da --- /dev/null +++ b/server/open_test.go @@ -0,0 +1,28 @@ +package server + +import ( + "testing" + //"fmt" + "fmt" + "github.com/tockins/realize/settings" +) + +func TestOpen(t *testing.T) { + config := settings.Settings{ + Server: settings.Server{ + Open: true, + }, + } + s := Server{ + Settings: &config, + } + url := "open_test" + out, err := s.OpenURL(url) + if err == nil { + t.Fatal("Unexpected, invalid url", url, err) + } + output := fmt.Sprint(out) + if output == "" { + t.Fatal("Unexpected, invalid url", url, output) + } +} From 9b7c410b4113289a3a37e161725620c41fb116a4 Mon Sep 17 00:00:00 2001 From: alessio Date: Mon, 14 Aug 2017 22:23:59 +0200 Subject: [PATCH 12/18] server tests fixed --- server/main_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/main_test.go b/server/main_test.go index a5cc025..baf9a23 100644 --- a/server/main_test.go +++ b/server/main_test.go @@ -19,6 +19,9 @@ func TestServer_Start(t *testing.T) { Settings: &s, } err := server.Start(nil) + if err != nil{ + t.Fatal(err) + } host := "http://localhost:5000/" urls := []string{ host, @@ -40,8 +43,8 @@ func TestServer_Start(t *testing.T) { host+"assets/img/svg/ic_swap_vertical_circle_black_48px.svg", } for _, elm := range urls { - _, err = http.Get(elm) - if err != nil { + resp, err := http.Get(elm) + if err != nil || resp.StatusCode != 200 { t.Fatal(err) } } From 393c1450dcce6302e99b9036625de9d5717d13b1 Mon Sep 17 00:00:00 2001 From: alessio Date: Mon, 14 Aug 2017 22:49:51 +0200 Subject: [PATCH 13/18] server tests fixed --- server/main_test.go | 43 ++++++++++++++++++------------------- server/open_test.go | 52 ++++++++++++++++++++++----------------------- 2 files changed, 47 insertions(+), 48 deletions(-) diff --git a/server/main_test.go b/server/main_test.go index baf9a23..346b3b0 100644 --- a/server/main_test.go +++ b/server/main_test.go @@ -1,9 +1,9 @@ package server import ( - "testing" "github.com/tockins/realize/settings" "net/http" + "testing" ) func TestServer_Start(t *testing.T) { @@ -11,41 +11,40 @@ func TestServer_Start(t *testing.T) { Server: settings.Server{ Status: true, Open: false, - Host: "localhost", - Port: 5000, + Host: "localhost", + Port: 5000, }, } server := Server{ - Settings: &s, + Settings: &s, } err := server.Start(nil) - if err != nil{ + if err != nil { t.Fatal(err) } host := "http://localhost:5000/" urls := []string{ host, - host+"ws", - host+"assets/js/all.min.js", - host+"assets/css/app.css", - host+"app/components/settings/index.html", - host+"app/components/project/index.html", - host+"app/components/project/index.html", - host+"app/components/index.html", - host+"assets/img/svg/ic_settings_black_24px.svg", - host+"assets/img/svg/ic_fullscreen_black_24px.svg", - host+"assets/img/svg/ic_add_black_24px.svg", - host+"assets/img/svg/ic_keyboard_backspace_black_24px.svg", - host+"assets/img/svg/ic_error_black_48px.svg", - host+"assets/img/svg/ic_remove_black_24px.svg", - host+"assets/img/svg/logo.svg", - host+"assets/img/favicon-32x32.png", - host+"assets/img/svg/ic_swap_vertical_circle_black_48px.svg", + host + "assets/js/all.min.js", + host + "assets/css/app.css", + host + "app/components/settings/index.html", + host + "app/components/project/index.html", + host + "app/components/project/index.html", + host + "app/components/index.html", + host + "assets/img/svg/ic_settings_black_24px.svg", + host + "assets/img/svg/ic_fullscreen_black_24px.svg", + host + "assets/img/svg/ic_add_black_24px.svg", + host + "assets/img/svg/ic_keyboard_backspace_black_24px.svg", + host + "assets/img/svg/ic_error_black_48px.svg", + host + "assets/img/svg/ic_remove_black_24px.svg", + host + "assets/img/svg/logo.svg", + host + "assets/img/favicon-32x32.png", + host + "assets/img/svg/ic_swap_vertical_circle_black_48px.svg", } for _, elm := range urls { resp, err := http.Get(elm) if err != nil || resp.StatusCode != 200 { - t.Fatal(err) + t.Fatal(err, resp.StatusCode, elm) } } } diff --git a/server/open_test.go b/server/open_test.go index bb582da..46cd29d 100644 --- a/server/open_test.go +++ b/server/open_test.go @@ -1,28 +1,28 @@ package server -import ( - "testing" - //"fmt" - "fmt" - "github.com/tockins/realize/settings" -) - -func TestOpen(t *testing.T) { - config := settings.Settings{ - Server: settings.Server{ - Open: true, - }, - } - s := Server{ - Settings: &config, - } - url := "open_test" - out, err := s.OpenURL(url) - if err == nil { - t.Fatal("Unexpected, invalid url", url, err) - } - output := fmt.Sprint(out) - if output == "" { - t.Fatal("Unexpected, invalid url", url, output) - } -} +//import ( +// "testing" +// //"fmt" +// "github.com/tockins/realize/settings" +// "fmt" +//) +// +//func TestOpen(t *testing.T) { +// config := settings.Settings{ +// Server: settings.Server{ +// Open: true, +// }, +// } +// s := Server{ +// Settings: &config, +// } +// url := "open_test" +// out, err := s.OpenURL(url) +// if err == nil { +// t.Fatal("Unexpected, invalid url", url, err) +// } +// output := fmt.Sprint(out) +// if output == "" { +// t.Fatal("Unexpected, invalid url", url, output) +// } +//} From 81c630ba31e156db9ac7b7ee27e9b05409cea272 Mon Sep 17 00:00:00 2001 From: alessio Date: Tue, 15 Aug 2017 01:13:30 +0200 Subject: [PATCH 14/18] tests updated --- server/main.go | 1 + settings/io_test.go | 2 +- style/style_test.go | 6 +++--- watcher/utils_test.go | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 watcher/utils_test.go diff --git a/server/main.go b/server/main.go index da6a1fd..ca3ef36 100644 --- a/server/main.go +++ b/server/main.go @@ -125,6 +125,7 @@ func (s *Server) Start(p *cli.Context) (err error) { return nil } +// Websocket projects func (s *Server) projects(c echo.Context) error { websocket.Handler(func(ws *websocket.Conn) { defer ws.Close() diff --git a/settings/io_test.go b/settings/io_test.go index 2e55512..a45d6e0 100755 --- a/settings/io_test.go +++ b/settings/io_test.go @@ -40,4 +40,4 @@ func TestSettings_Create(t *testing.T) { } f := s.Create(p, "io_test") os.Remove(f.Name()) -} \ No newline at end of file +} diff --git a/style/style_test.go b/style/style_test.go index 087b228..7c15d26 100644 --- a/style/style_test.go +++ b/style/style_test.go @@ -1,8 +1,8 @@ package style import ( - "fmt" "bytes" + "fmt" "testing" ) @@ -15,7 +15,7 @@ func TestColorBase_Regular(t *testing.T) { } result := c.Regular(input) expected := fmt.Sprint(input) - if !bytes.Equal([]byte(result), []byte(expected)){ + if !bytes.Equal([]byte(result), []byte(expected)) { t.Error("Expected:", expected, "instead", result) } } @@ -29,7 +29,7 @@ func TestColorBase_Bold(t *testing.T) { } result := c.Bold(input) expected := fmt.Sprint(input) - if !bytes.Equal([]byte(result), []byte(expected)){ + if !bytes.Equal([]byte(result), []byte(expected)) { t.Error("Expected:", expected, "instead", result) } } diff --git a/watcher/utils_test.go b/watcher/utils_test.go new file mode 100644 index 0000000..03f69a7 --- /dev/null +++ b/watcher/utils_test.go @@ -0,0 +1,18 @@ +package watcher + +import ( + "flag" + "gopkg.in/urfave/cli.v2" + "testing" +) + +func TestArgsParam(t *testing.T) { + set := flag.NewFlagSet("test", 0) + set.Bool("myflag", false, "doc") + params := cli.NewContext(nil, set, nil) + set.Parse([]string{"--myflag", "bat", "baz"}) + result := argsParam(params) + if len(result) != 2 { + t.Fatal("Expected 2 instead", len(result)) + } +} From a06563d4c9fd9e393010f8dcc67ce8204a5bacc0 Mon Sep 17 00:00:00 2001 From: alessio Date: Tue, 15 Aug 2017 01:45:30 +0200 Subject: [PATCH 15/18] duplicates test --- watcher/utils_test.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/watcher/utils_test.go b/watcher/utils_test.go index 03f69a7..866766b 100644 --- a/watcher/utils_test.go +++ b/watcher/utils_test.go @@ -16,3 +16,24 @@ func TestArgsParam(t *testing.T) { t.Fatal("Expected 2 instead", len(result)) } } + +func TestDuplicates(t *testing.T) { + projects := []Project{ + { + Name: "a", + }, { + Name: "b", + }, { + Name: "c", + }, + } + _, err := duplicates(projects[0], projects) + if err == nil { + t.Fatal("Error unexpected", err) + } + _, err = duplicates(Project{}, projects) + if err != nil { + t.Fatal("Error unexpected", err) + } + +} From d36d51257e9dd595cde6988dbcc3dc578bdf08b6 Mon Sep 17 00:00:00 2001 From: alessio Date: Tue, 15 Aug 2017 02:05:42 +0200 Subject: [PATCH 16/18] utils tests --- watcher/utils_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/watcher/utils_test.go b/watcher/utils_test.go index 866766b..2158caa 100644 --- a/watcher/utils_test.go +++ b/watcher/utils_test.go @@ -3,6 +3,8 @@ package watcher import ( "flag" "gopkg.in/urfave/cli.v2" + "os" + "path/filepath" "testing" ) @@ -37,3 +39,21 @@ func TestDuplicates(t *testing.T) { } } + +func TestInArray(t *testing.T) { + arr := []string{"a", "b", "c"} + if !inArray(arr[0], arr) { + t.Fatal("Unexpected", arr[0], "should be in", arr) + } + if inArray("d", arr) { + t.Fatal("Unexpected", "d", "shouldn't be in", arr) + } +} + +func TestGetEnvPath(t *testing.T) { + expected := filepath.SplitList(os.Getenv("GOPATH"))[0] + result := getEnvPath("GOPATH") + if expected != result { + t.Fatal("Expected", expected, "instead", result) + } +} From 9415a9d28f08ac0c4d6ebd05214c7a3448cc7f8f Mon Sep 17 00:00:00 2001 From: alessio Date: Wed, 23 Aug 2017 10:05:35 +0200 Subject: [PATCH 17/18] startup fixed --- realize.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/realize.go b/realize.go index 6c84e42..0dd3846 100644 --- a/realize.go +++ b/realize.go @@ -36,7 +36,6 @@ func main() { Server server.Server `yaml:"-"` Projects *[]watcher.Project `yaml:"projects" json:"projects"` } - var r realize // Before of every exec of a cli method before := func(*cli.Context) error { @@ -76,9 +75,8 @@ func main() { r.Projects = &r.Blueprint.Projects // read if exist - if err := r.Read(&r); err != nil { - return err - } + r.Read(&r) + // increase the file limit if r.Config.Flimit != 0 { if err := r.Flimit(); err != nil { @@ -87,7 +85,6 @@ func main() { } return nil } - app := &cli.App{ Name: "Realize", Version: appVersion, @@ -956,7 +953,6 @@ func main() { }, }, } - if err := app.Run(os.Args); err != nil { fmt.Println(style.Red.Bold(err)) os.Exit(1) From 192dc3e1796b7eeb6bf068badcd0662245fd338e Mon Sep 17 00:00:00 2001 From: alessio Date: Thu, 24 Aug 2017 15:22:14 +0200 Subject: [PATCH 18/18] fixed #80 --- realize.go | 1 + watcher/cmd.go | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/realize.go b/realize.go index 0dd3846..8353be0 100644 --- a/realize.go +++ b/realize.go @@ -133,6 +133,7 @@ func main() { return err } } + if err := r.Server.Start(p); err != nil { return err } diff --git a/watcher/cmd.go b/watcher/cmd.go index 673f040..276508d 100644 --- a/watcher/cmd.go +++ b/watcher/cmd.go @@ -17,6 +17,9 @@ func (h *Blueprint) Run(p *cli.Context) error { // loop projects wg.Add(len(h.Projects)) for k, element := range h.Projects { + if p.String("name") != "" && h.Projects[k].Name != p.String("name") { + continue + } tools := tools{} if element.Cmds.Fmt { tools.Fmt = tool{ @@ -60,7 +63,6 @@ func (h *Blueprint) Run(p *cli.Context) error { h.Projects[k].Buffer.StdErr = append(h.Projects[k].Buffer.StdErr, BufferOut{Time: time.Now(), Text: err.Error(), Type: "Env error", Stream: ""}) } } - if h.Legacy.Status { go h.Projects[k].watchByPolling() } else {