diff --git a/gotime/smplt/simplate.go b/gotime/smplt/simplate.go index 0fc9238..d3061dd 100644 --- a/gotime/smplt/simplate.go +++ b/gotime/smplt/simplate.go @@ -1,6 +1,8 @@ package smplt import ( + "mime" + "path" "strings" ) @@ -8,17 +10,27 @@ const ( SIMPLATE_TYPE_RENDERED = "rendered" SIMPLATE_TYPE_STATIC = "static" SIMPLATE_TYPE_NEGOTIATED = "negotiated" + SIMPLATE_TYPE_JSON = "json" ) type Simplate struct { - Type string + Filename string + Type string + ContentType string } func SimplateFromString(filename, content string) *Simplate { nbreaks := strings.Count(content, " ") s := &Simplate{ - Type: SIMPLATE_TYPE_STATIC, + Filename: filename, + Type: SIMPLATE_TYPE_STATIC, + ContentType: mime.TypeByExtension(path.Ext(filename)), + } + + if nbreaks == 1 && s.ContentType == "application/json" { + s.Type = SIMPLATE_TYPE_JSON + return s } if nbreaks == 2 { diff --git a/gotime/smplt/smplt_test.go b/gotime/smplt/smplt_test.go index 490a729..a76ae31 100644 --- a/gotime/smplt/smplt_test.go +++ b/gotime/smplt/smplt_test.go @@ -1,12 +1,14 @@ package smplt_test import ( + "mime" "testing" . "github.com/meatballhat/box-o-sand/gotime/smplt" ) -const BASIC_RENDERED_TXT_SIMPLATE = ` +const ( + BASIC_RENDERED_TXT_SIMPLATE = ` import ( "time" ) @@ -17,16 +19,70 @@ type Dance struct { } d := &Dance{ - Who: "Everybody", + Who: "Everybody", When: time.Now(), } {{d.Who}} Dance {{d.When}}! ` - -const BASIC_STATIC_TXT_SIMPLATE = ` + BASIC_STATIC_TXT_SIMPLATE = ` Everybody Dance Now! ` + BASIC_JSON_SIMPLATE = ` +import ( + "time" +) + +type Dance struct { + Who string + When time.Time +} + +d := &Dance{ + Who: "Everybody", + When: time.Now(), +} +response.SetBody(d) +` + BASIC_NEGOTIATED_SIMPLATE = ` +import ( + "time" +) + +type Dance struct { + Who string + When time.Time +} + +d := &Dance{ + Who: "Everybody", + When: time.Now(), +} + text/plain +{{d.Who}} Dance {{d.When}}! + + application/json +{"who":"{{d.Who}}","when":"{{d.When}}"} +` +) + +func TestSimplateKnowsItsFilename(t *testing.T) { + s := SimplateFromString("hasty-decisions.txt", "herpherpderpherp") + if s.Filename != "hasty-decisions.txt" { + t.Errorf("Simplate filename incorrectly assigned as %s instead of %s", + s.Filename, "hasty-decisions.txt") + } +} + +func TestSimplateKnowsItsContentType(t *testing.T) { + s := SimplateFromString("hasty-decisions.js", "function herp() { return 'derp'; }") + expected := mime.TypeByExtension(".js") + + if s.ContentType != expected { + t.Errorf("Simplate content type incorrectly assigned as %s instead of %s", + s.ContentType, expected) + } +} func TestDetectsRenderedSimplate(t *testing.T) { s := SimplateFromString("basic-rendered.txt", BASIC_RENDERED_TXT_SIMPLATE) @@ -41,3 +97,18 @@ func TestDetectsStaticSimplate(t *testing.T) { t.Errorf("Simplate detected as %s instead of %s", s.Type, SIMPLATE_TYPE_STATIC) } } + +func TestDetectsJSONSimplates(t *testing.T) { + s := SimplateFromString("basic.json", BASIC_JSON_SIMPLATE) + if s.Type != SIMPLATE_TYPE_JSON { + t.Errorf("Simplate detected as %s instead of %s", s.Type, SIMPLATE_TYPE_JSON) + } +} + +func TestDetectsNegotiatedSimplates(t *testing.T) { + s := SimplateFromString("hork", BASIC_NEGOTIATED_SIMPLATE) + if s.Type != SIMPLATE_TYPE_NEGOTIATED { + t.Errorf("Simplate detected as %s instead of %s", + s.Type, SIMPLATE_TYPE_NEGOTIATED) + } +}