(t *testing.T)
| 66 | } |
| 67 | |
| 68 | func TestSvelteAwait(t *testing.T) { |
| 69 | is := is.New(t) |
| 70 | log := testlog.New() |
| 71 | ctx := context.Background() |
| 72 | dir := t.TempDir() |
| 73 | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 74 | w.Header().Add("Content-Type", "text/plain") |
| 75 | w.Write([]byte("all good")) |
| 76 | })) |
| 77 | defer server.Close() |
| 78 | td := testdir.New(dir) |
| 79 | td.Files["view/index.svelte"] = ` |
| 80 | <script> |
| 81 | let promise = fetch("` + server.URL + `").then(res => res.text()) |
| 82 | </script> |
| 83 | |
| 84 | <div> |
| 85 | {#await promise} |
| 86 | Loading... |
| 87 | {:then value} |
| 88 | response: {value} |
| 89 | {/await} |
| 90 | </div> |
| 91 | ` |
| 92 | td.NodeModules["svelte"] = versions.Svelte |
| 93 | is.NoErr(td.Write(ctx)) |
| 94 | vm, err := v8.Load() |
| 95 | is.NoErr(err) |
| 96 | svelteCompiler, err := svelte.Load(vm) |
| 97 | is.NoErr(err) |
| 98 | transformer, err := transformrt.Default(log, svelteCompiler) |
| 99 | is.NoErr(err) |
| 100 | module, err := gomod.Find(dir) |
| 101 | is.NoErr(err) |
| 102 | gfs := genfs.New(dag.Discard, module, log) |
| 103 | is.NoErr(err) |
| 104 | gfs.FileGenerator("bud/view/_ssr.js", ssr.New(module, transformer)) |
| 105 | // Read the wrapped version of index.svelte with node_modules rewritten |
| 106 | code, err := fs.ReadFile(gfs, "bud/view/_ssr.js") |
| 107 | is.NoErr(err) |
| 108 | result, err := vm.Eval("render.js", string(code)+`; bud.render("/", {})`) |
| 109 | is.NoErr(err) |
| 110 | var res ssr.Response |
| 111 | err = json.Unmarshal([]byte(result), &res) |
| 112 | is.NoErr(err) |
| 113 | is.Equal(res.Status, 200) |
| 114 | is.Equal(len(res.Headers), 1) |
| 115 | is.Equal(res.Headers["Content-Type"], "text/html") |
| 116 | is.True(strings.Contains(res.Body, `<script id="bud_props" type="text/template" defer>{}</script>`)) |
| 117 | is.True(strings.Contains(res.Body, `<script type="module" src="/bud/view/_index.svelte.js" defer></script>`)) |
| 118 | is.True(strings.Contains(res.Body, `<div id="bud_target">`)) |
| 119 | is.True(strings.Contains(res.Body, `Loading...`)) |
| 120 | } |
| 121 | |
| 122 | // Wrap props with key |
| 123 | func wrap(key string, props interface{}) map[string]interface{} { |
nothing calls this directly
no test coverage detected