summaryrefslogtreecommitdiff
path: root/js_test.go
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-01-10 12:49:32 +0100
committerGitHub <noreply@github.com>2025-01-10 12:49:32 +0100
commitbf99c233a18c3165e0d4d251b41224e5bc6eb93d (patch)
treed32f0fd0770a049552cdd0d51e9402d594e9a35e /js_test.go
parent924184f37ef0d3e244f8e8991c259affb45d0ae2 (diff)
Implement nested scraping (#81)
Diffstat (limited to 'js_test.go')
-rw-r--r--js_test.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/js_test.go b/js_test.go
index 0aeb9cd..4b08720 100644
--- a/js_test.go
+++ b/js_test.go
@@ -168,6 +168,98 @@ func TestJSScrapeNaN(t *testing.T) {
require.Nil(t, result)
}
+func TestJSScrapeParamURL(t *testing.T) {
+ js := `
+ export default function({ url }) {
+ return url;
+ }
+ `
+ exports, err := flyscrape.Compile(js, nil)
+ require.NoError(t, err)
+
+ result, err := exports.Scrape(flyscrape.ScrapeParams{
+ HTML: html,
+ URL: "http://localhost/",
+ })
+ require.NoError(t, err)
+ require.Equal(t, "http://localhost/", result)
+}
+
+func TestJSScrapeParamAbsoluteURL(t *testing.T) {
+ js := `
+ export default function({ absoluteURL }) {
+ return absoluteURL("/foo");
+ }
+ `
+ exports, err := flyscrape.Compile(js, nil)
+ require.NoError(t, err)
+
+ result, err := exports.Scrape(flyscrape.ScrapeParams{
+ HTML: html,
+ URL: "http://localhost/",
+ })
+ require.NoError(t, err)
+ require.Equal(t, "http://localhost/foo", result)
+}
+
+func TestJSScrapeParamScrape(t *testing.T) {
+ js := `
+ export default function({ scrape }) {
+ return scrape("/foo", function({ url }) {
+ return {
+ url: url,
+ foo: "bar",
+ };
+ });
+ }
+ `
+ exports, err := flyscrape.Compile(js, nil)
+ require.NoError(t, err)
+
+ result, err := exports.Scrape(flyscrape.ScrapeParams{
+ HTML: html,
+ URL: "http://localhost/",
+ Process: func(url string) ([]byte, error) {
+ return nil, nil
+ },
+ })
+ require.NoError(t, err)
+ require.Equal(t, map[string]any{
+ "url": "http://localhost/foo",
+ "foo": "bar",
+ }, result)
+}
+
+func TestJSScrapeParamScrapeDeep(t *testing.T) {
+ js := `
+ export default function({ scrape }) {
+ return scrape("/foo/", function({ url, scrape }) {
+ return {
+ url: url,
+ deep: scrape("bar", function({ url }) {
+ return url;
+ }),
+ };
+ });
+ }
+ `
+ exports, err := flyscrape.Compile(js, nil)
+ require.NoError(t, err)
+
+ result, err := exports.Scrape(flyscrape.ScrapeParams{
+ HTML: html,
+ URL: "http://localhost/",
+ Process: func(url string) ([]byte, error) {
+ return nil, nil
+ },
+ })
+ require.NoError(t, err)
+ require.Equal(t, map[string]any{
+ "url": "http://localhost/foo/",
+ "deep": "http://localhost/foo/bar",
+ }, result)
+}
+
func TestJSCompileError(t *testing.T) {
exports, err := flyscrape.Compile("import foo;", nil)
require.Error(t, err)