{
  "api": {
    "abort": {
      "general.any.js": {
        "fail": [
          "Already aborted signal rejects immediately"
        ]
      },
      "cache.https.any.js": {
        "note": "undici doesn't implement http caching",
        "skip": true
      }
    },
    "basic": {
      "conditional-get.any.js": {
        "fail": [
          "Testing conditional GET with ETags"
        ],
        "note": "undici doesn't keep track of etags"
      },
      "header-value-combining.any.js": {
        "fail": [
          "response.headers.get('content-length') expects 0, 0",
          "response.headers.get('foo-test') expects 1, 2, 3",
          "response.headers.get('heya') expects , \\x0B\f, 1, , , 2"
        ],
        "flaky": [
          "response.headers.get('content-length') expects 0",
          "response.headers.get('double-trouble') expects , ",
          "response.headers.get('www-authenticate') expects 1, 2, 3, 4"
        ]
      },
      "integrity.sub.any.js": {
        "fail": [
          "Empty string integrity for opaque response"
        ]
      },
      "keepalive.any.js": {
        "note": "document is not defined",
        "skip": true
      },
      "mode-no-cors.sub.any.js": {
        "note": "undici doesn't implement CORs",
        "skip": true
      },
      "mode-same-origin.any.js": {
        "note": "undici doesn't respect RequestInit.mode",
        "skip": true
      },
      "referrer.any.js": {
        "fail": [
          "origin-when-cross-origin policy on a same-origin URL"
        ]
      },
      "request-forbidden-headers.any.js": {
        "note": "undici doesn't filter headers",
        "skip": true
      },
      "request-headers.any.js": {
        "fail": [
          "Fetch with Chicken",
          "Fetch with Chicken with body",
          "Fetch with TacO and mode \"same-origin\" needs an Origin header",
          "Fetch with TacO and mode \"cors\" needs an Origin header",
          "Fetch with POST with Float16Array body"
        ]
      },
      "request-private-network-headers.tentative.any.js": {
        "note": "undici doesn't filter headers",
        "skip": true
      },
      "request-upload.any.js": {
        "note": "no Float16Array",
        "fail": [
          "Fetch with POST with Float16Array body"
        ]
      },
      "request-upload.h2.any.js": {
        "note": "undici doesn't support http/2",
        "skip": true
      },
      "scheme-blob.sub.any.js": {
        "note": "fail: fails everywhere, flaky: only node 18",
        "fail": [
          "Fetching URL.createObjectURL(invalid_type_blob) is OK"
        ],
        "flaky": [
          "Fetching URL.createObjectURL(empty_blob) is OK",
          "Fetching URL.createObjectURL(empty_type_blob) is OK",
          "Fetching URL.createObjectURL(empty_data_blob) is OK"
        ]
      },
      "status.h2.any.js": {
        "note": "undici doesn't support http/2",
        "skip": true
      },
      "stream-safe-creation.any.js": {
        "note": "tests are very finnicky",
        "flaky": [
          "throwing Object.prototype.type accessor should not affect stream creation by 'fetch'",
          "Object.prototype.type accessor returning invalid value should not affect stream creation by 'fetch'",
          "throwing Object.prototype.highWaterMark accessor should not affect stream creation by 'fetch'",
          "Object.prototype.highWaterMark accessor returning invalid value should not affect stream creation by 'fetch'"
        ]
      }
    },
    "body": {
      "mime-type.any.js": {
        "note": "fails on all platforms, https://wpt.fyi/results/fetch/api/body/mime-type.any.html?label=master&label=experimental&product=chrome&product=firefox&product=safari&product=node.js&product=deno&aligned",
        "fail": [
          "Response: Extract a MIME type with clone"
        ]
      }
    },
    "cors": {
      "note": "undici doesn't implement CORs",
      "skip": true
    },
    "credentials": {
      "authentication-redirection.any.js": {
        "note": "connects to https server",
        "fail": [
          "getAuthorizationHeaderValue - cross origin redirection",
          "getAuthorizationHeaderValue - same origin redirection"
        ]
      },
      "cookies.any.js": {
        "fail": [
          "Include mode: 1 cookie",
          "Include mode: 2 cookies",
          "Same-origin mode: 1 cookie",
          "Same-origin mode: 2 cookies"
        ]
      }
    },
    "fetch-later": {
      "note": "this is not part of the spec, only a proposal",
      "skip": true
    },
    "headers": {
      "header-setcookie.any.js": {
        "note": "undici doesn't filter headers",
        "fail": [
          "Set-Cookie is a forbidden response header"
        ]
      },
      "header-values-normalize.any.js": {
        "note": "TODO(@KhafraDev): https://github.com/nodejs/undici/issues/1680",
        "fail": [
          "XMLHttpRequest with value %00",
          "XMLHttpRequest with value %01",
          "XMLHttpRequest with value %02",
          "XMLHttpRequest with value %03",
          "XMLHttpRequest with value %04",
          "XMLHttpRequest with value %05",
          "XMLHttpRequest with value %06",
          "XMLHttpRequest with value %07",
          "XMLHttpRequest with value %08",
          "XMLHttpRequest with value %09",
          "XMLHttpRequest with value %0A",
          "XMLHttpRequest with value %0D",
          "XMLHttpRequest with value %0E",
          "XMLHttpRequest with value %0F",
          "XMLHttpRequest with value %10",
          "XMLHttpRequest with value %11",
          "XMLHttpRequest with value %12",
          "XMLHttpRequest with value %13",
          "XMLHttpRequest with value %14",
          "XMLHttpRequest with value %15",
          "XMLHttpRequest with value %16",
          "XMLHttpRequest with value %17",
          "XMLHttpRequest with value %18",
          "XMLHttpRequest with value %19",
          "XMLHttpRequest with value %1A",
          "XMLHttpRequest with value %1B",
          "XMLHttpRequest with value %1C",
          "XMLHttpRequest with value %1D",
          "XMLHttpRequest with value %1E",
          "XMLHttpRequest with value %1F",
          "XMLHttpRequest with value %20",
          "fetch() with value %01",
          "fetch() with value %02",
          "fetch() with value %03",
          "fetch() with value %04",
          "fetch() with value %05",
          "fetch() with value %06",
          "fetch() with value %07",
          "fetch() with value %08",
          "fetch() with value %0E",
          "fetch() with value %0F",
          "fetch() with value %10",
          "fetch() with value %11",
          "fetch() with value %12",
          "fetch() with value %13",
          "fetch() with value %14",
          "fetch() with value %15",
          "fetch() with value %16",
          "fetch() with value %17",
          "fetch() with value %18",
          "fetch() with value %19",
          "fetch() with value %1A",
          "fetch() with value %1B",
          "fetch() with value %1C",
          "fetch() with value %1D",
          "fetch() with value %1E",
          "fetch() with value %1F"
        ]
      },
      "header-values.any.js": {
        "fail": [
          "XMLHttpRequest with value x%00x needs to throw",
          "XMLHttpRequest with value x%0Ax needs to throw",
          "XMLHttpRequest with value x%0Dx needs to throw",
          "XMLHttpRequest with all valid values",
          "fetch() with all valid values"
        ]
      },
      "headers-no-cors.any.js": {
        "note": "undici doesn't implement CORs",
        "skip": true
      }
    },
    "redirect": {
      "redirect-empty-location.any.js": {
        "note": "undici handles redirect: manual differently than browsers",
        "fail": [
          "redirect response with empty Location, manual mode"
        ]
      },
      "redirect-keepalive.any.js": {
        "note": "document is not defined",
        "skip": true
      },
      "redirect-keepalive.https.any.js": {
        "note": "document is not defined",
        "skip": true
      },
      "redirect-location-escape.tentative.any.js": {
        "note": "TODO(@KhafraDev): crashes runner",
        "skip": true
      },
      "redirect-location.any.js": {
        "note": "undici handles redirect: manual differently than browsers",
        "fail": [
          "Redirect 301 in \"manual\" mode without location",
          "Redirect 301 in \"manual\" mode with invalid location",
          "Redirect 301 in \"manual\" mode with data location",
          "Redirect 302 in \"manual\" mode without location",
          "Redirect 302 in \"manual\" mode with invalid location",
          "Redirect 302 in \"manual\" mode with data location",
          "Redirect 303 in \"manual\" mode without location",
          "Redirect 303 in \"manual\" mode with invalid location",
          "Redirect 303 in \"manual\" mode with data location",
          "Redirect 307 in \"manual\" mode without location",
          "Redirect 307 in \"manual\" mode with invalid location",
          "Redirect 307 in \"manual\" mode with data location",
          "Redirect 308 in \"manual\" mode without location",
          "Redirect 308 in \"manual\" mode with invalid location",
          "Redirect 308 in \"manual\" mode with data location",
          "Redirect 301 in \"manual\" mode with valid location",
          "Redirect 302 in \"manual\" mode with valid location",
          "Redirect 303 in \"manual\" mode with valid location",
          "Redirect 307 in \"manual\" mode with valid location",
          "Redirect 308 in \"manual\" mode with valid location"
        ]
      },
      "redirect-method.any.js": {
        "fail": [
          "Redirect 303 with TESTING"
        ]
      },
      "redirect-mode.any.js": {
        "note": "mode isn't respected",
        "skip": true
      },
      "redirect-origin.any.js": {
        "note": "TODO(@KhafraDev): investigate",
        "skip": true
      },
      "redirect-referrer-override.any.js": {
        "note": "TODO(@KhafraDev): investigate",
        "skip": true
      },
      "redirect-referrer.any.js": {
        "note": "TODO(@KhafraDev): investigate",
        "skip": true
      },
      "redirect-upload.h2.any.js": {
        "note": "undici doesn't support http/2",
        "skip": true
      }
    },
    "request": {
      "request-cache-default-conditional.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-cache-default.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-cache-force-cache.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-cache-no-cache.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-cache-no-store.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-cache-only-if-cached.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-cache-reload.any.js": {
        "note": "undici doesn't implement an http cache",
        "skip": true
      },
      "request-consume-empty.any.js": {
        "note": "the semantics about this test are being discussed - https://github.com/web-platform-tests/wpt/pull/3950",
        "fail": [
          "Consume empty FormData request body as text"
        ]
      },
      "request-disturbed.any.js": {
        "note": "this test fails in all other platforms - https://wpt.fyi/results/fetch/api/request/request-disturbed.any.html?label=master&label=experimental&product=chrome&product=firefox&product=safari&product=deno&aligned&view=subtest",
        "fail": [
          "Input request used for creating new request became disturbed even if body is not used"
        ]
      },
      "request-headers.any.js": {
        "note": "undici doesn't filter headers",
        "fail": [
          "Adding invalid request header \"Accept-Charset: KO\"",
          "Adding invalid request header \"accept-charset: KO\"",
          "Adding invalid request header \"ACCEPT-ENCODING: KO\"",
          "Adding invalid request header \"Accept-Encoding: KO\"",
          "Adding invalid request header \"Access-Control-Request-Headers: KO\"",
          "Adding invalid request header \"Access-Control-Request-Method: KO\"",
          "Adding invalid request header \"Connection: KO\"",
          "Adding invalid request header \"Content-Length: KO\"",
          "Adding invalid request header \"Cookie: KO\"",
          "Adding invalid request header \"Cookie2: KO\"",
          "Adding invalid request header \"Date: KO\"",
          "Adding invalid request header \"DNT: KO\"",
          "Adding invalid request header \"Expect: KO\"",
          "Adding invalid request header \"Host: KO\"",
          "Adding invalid request header \"Keep-Alive: KO\"",
          "Adding invalid request header \"Origin: KO\"",
          "Adding invalid request header \"Referer: KO\"",
          "Adding invalid request header \"Set-Cookie: KO\"",
          "Adding invalid request header \"TE: KO\"",
          "Adding invalid request header \"Trailer: KO\"",
          "Adding invalid request header \"Transfer-Encoding: KO\"",
          "Adding invalid request header \"Upgrade: KO\"",
          "Adding invalid request header \"Via: KO\"",
          "Adding invalid request header \"Proxy-: KO\"",
          "Adding invalid request header \"proxy-a: KO\"",
          "Adding invalid request header \"Sec-: KO\"",
          "Adding invalid request header \"sec-b: KO\"",
          "Adding invalid no-cors request header \"Content-Type: KO\"",
          "Adding invalid no-cors request header \"Potato: KO\"",
          "Adding invalid no-cors request header \"proxy: KO\"",
          "Adding invalid no-cors request header \"proxya: KO\"",
          "Adding invalid no-cors request header \"sec: KO\"",
          "Adding invalid no-cors request header \"secb: KO\"",
          "Adding invalid no-cors request header \"Empty-Value: \"",
          "Check that request constructor is filtering headers provided as init parameter",
          "Check that no-cors request constructor is filtering headers provided as init parameter",
          "Check that no-cors request constructor is filtering headers provided as part of request parameter"
        ]
      },
      "request-init-priority.any.js": {
        "note": "undici doesn't implement priority hints, yet(?)",
        "skip": true
      }
    },
    "response": {
      "response-blob-realm.any.js": {
        "note": "onload is not defined (globalThis does not extend EventTarget)",
        "fail": [
          "realm of the Uint8Array from Response bytes()"
        ]
      },
      "response-clone.any.js": {
        "note": "Node streams are too buggy currently.",
        "skip": true
      },
      "response-consume-empty.any.js": {
        "fail": [
          "Consume empty FormData response body as text"
        ]
      },
      "response-consume-stream.any.js": {
        "note": "only fail in node v18",
        "flaky": [
          "Read blob response's body as readableStream with mode=byob",
          "Read text response's body as readableStream with mode=byob",
          "Read URLSearchParams response's body as readableStream with mode=byob",
          "Read array buffer response's body as readableStream with mode=byob",
          "Read form data response's body as readableStream with mode=byob"
        ]
      },
      "response-stream-with-broken-then.any.js": {
        "note": "this is a bug in webstreams, see https://github.com/nodejs/node/issues/46786",
        "skip": true
      }
    },
    "idlharness.any.js": {
      "note": "https://github.com/nodejs/undici/issues/1666#issuecomment-1275177704",
      "fail": [
        "Window interface: operation fetch(RequestInfo, optional RequestInit)"
      ]
    }
  },
  "content-encoding": {
    "br": {
      "bad-br-body.https.any.js": {
        "note": "TODO(@KhafraDev): investigate failure",
        "fail": [
          "Consuming the body of a resource with bad br content with arrayBuffer() should reject"
        ]
      },
      "big-br-body.https.any.js": {
        "note": "TODO(@KhafraDev): investigate failure",
        "fail": [
          "large br data should be decompressed successfully",
          "large br data should be decompressed successfully with byte stream"
        ]
      },
      "br-body.https.any.js": {
        "note": "TODO(@KhafraDev): investigate failure",
        "fail": [
          "fetched br data with content type text should be decompressed.",
          "fetched br data with content type octetstream should be decompressed."
        ]
      }
    },
    "gzip": {
      "bad-gzip-body.any.js": {
        "note": "TODO(@KhafraDev): investigate failure",
        "fail": [
          "Consuming the body of a resource with bad gzip content with arrayBuffer() should reject",
          "Consuming the body of a resource with bad gzip content with blob() should reject",
          "Consuming the body of a resource with bad gzip content with json() should reject",
          "Consuming the body of a resource with bad gzip content with text() should reject"
        ]
      },
      "gzip-body.any.js": {
        "note": "TODO(@KhafraDev): investigate failure",
        "fail": [
          "fetched gzip data with content type text should be decompressed.",
          "fetched gzip data with content type octetstream should be decompressed."
        ]
      },
      "big-gzip-body.https.any.js": {
        "note": "TODO(@KhafraDev): investigate failure",
        "fail": [
          "large gzip data should be decompressed successfully",
          "large gzip data should be decompressed successfully with byte stream"
        ]
      }
    },
    "zstd": {
      "note": "node does not have zstd yet",
      "skip": true
    }
  },
  "content-length": {
    "api-and-duplicate-headers.any.js": {
      "fail": [
        "XMLHttpRequest and duplicate Content-Length/Content-Type headers",
        "fetch() and duplicate Content-Length/Content-Type headers"
      ]
    }
  },
  "cross-origin-resource-policy": {
    "note": "undici doesn't implement CORs",
    "skip": true
  },
  "http-cache": {
    "note": "undici doesn't implement http caching",
    "skip": true
  },
  "metadata": {
    "note": "undici doesn't respect RequestInit.mode",
    "skip": true
  },
  "orb": {
    "tentative": {
      "note": "undici doesn't implement orb",
      "skip": true
    }
  },
  "range": {
    "note": "undici doesn't respect range header",
    "skip": true
  },
  "security": {
    "1xx-response.any.js": {
      "note": "TODO(@KhafraDev): investigate timeout",
      "skip": true,
      "fail": [
        "Status(100) should be ignored.",
        "Status(101) should be accepted, with removing body.",
        "Status(103) should be ignored.",
        "Status(199) should be ignored."
      ]
    }
  },
  "stale-while-revalidate": {
    "note": "undici doesn't implement http caching",
    "skip": true
  },
	"idlharness.any.js": {
		"flaky": [
			"Window interface: operation fetch(RequestInfo, optional RequestInit)"
		]
	}
}
