{"name":"http_basic.nu","source":"// Test: stdlib/ext/http.nu — GET + POST against httpbin.org.\n//\n// GATED: this test only runs when NURL_HTTP_TESTS=1 is set in the\n// environment (run_tests.sh skips files matching `http_*` otherwise).\n// Reason: requests reach the public internet, which is unreliable in\n// CI, slow, and we don't want default builds to depend on it.\n//\n// To run manually:\n//   NURL_HTTP_TESTS=1 ./build.sh\n// or:\n//   ./build/nurlc compiler/tests/http_basic.nu > /tmp/h.ll && \\\n//     clang /tmp/h.ll stdlib/runtime.o -lm $(pkg-config --libs libcurl) -o /tmp/h && /tmp/h\n\n$ `stdlib/ext/http.nu`\n\n@ main → i {\n    // ── GET ──\n    : !Response HttpErr g ( http_get `https://httpbin.org/get` )\n    ?? g {\n        T r → {\n            ( nurl_print `get_status=` )\n            ( nurl_print ( nurl_str_int ( http_status r ) ) )\n            ( nurl_print `\\n` )\n            // Body should mention the URL — we don't pin exact bytes since\n            // httpbin includes timestamps and IPs.\n            : i blen ( nurl_str_len ( http_body_str r ) )\n            ( nurl_print `get_body_nonempty=` )\n            ( nurl_print ? > blen 0 `T` `F` )\n            ( nurl_print `\\n` )\n            // Headers — at least one non-zero.\n            ( nurl_print `get_header_count_gt0=` )\n            ( nurl_print ? > ( http_header_count r ) 0 `T` `F` )\n            ( nurl_print `\\n` )\n            ( response_free r )\n        }\n        F e → {\n            ( nurl_print `get_err=` )\n            ?? # HttpErr e {\n                HttpConnect → { ( nurl_print `Connect\\n` ) }\n                HttpTimeout → { ( nurl_print `Timeout\\n` ) }\n                HttpTls → { ( nurl_print `Tls\\n` ) }\n                HttpDns → { ( nurl_print `Dns\\n` ) }\n                HttpInvalidUrl → { ( nurl_print `InvalidUrl\\n` ) }\n                HttpOther → { ( nurl_print `Other\\n` ) }\n            }\n        }\n    }\n\n    // ── POST with body ──\n    : !Response HttpErr p ( http_post `https://httpbin.org/post` `{\"hello\":\"nurl\"}` `application/json` )\n    ?? p {\n        T r → {\n            ( nurl_print `post_status=` )\n            ( nurl_print ( nurl_str_int ( http_status r ) ) )\n            ( nurl_print `\\n` )\n            ( response_free r )\n        }\n        F e → { ( nurl_print `post_err\\n` ) }\n    }\n\n    // ── Invalid URL → InvalidUrl error ──\n    : !Response HttpErr bad ( http_get `notaurl` )\n    ?? bad {\n        T r → {\n            ( nurl_print `bad_unexpected_ok\\n` )\n            ( response_free r )\n        }\n        F e → {\n            ( nurl_print `bad=` )\n            ?? # HttpErr e {\n                HttpConnect → { ( nurl_print `Connect\\n` ) }\n                HttpTimeout → { ( nurl_print `Timeout\\n` ) }\n                HttpTls → { ( nurl_print `Tls\\n` ) }\n                HttpDns → { ( nurl_print `Dns\\n` ) }\n                HttpInvalidUrl → { ( nurl_print `InvalidUrl\\n` ) }\n                HttpOther → { ( nurl_print `Other\\n` ) }\n            }\n        }\n    }\n\n    ( nurl_print `done\\n` )\n    ^ 0\n}\n","bytes":3032}