import { describe, expect, it } from "vitest";
import { isPlainObject } from "./plain-object.js";

describe("isPlainObject", () => {
  it.each([{}, { a: 1 }, Object.create(null), new (class X {})()])(
    "accepts object-tag values: %j",
    (value) => {
      expect(isPlainObject(value)).toBe(true);
    },
  );

  it.each([
    null,
    [],
    new Date(),
    /re/,
    "x",
    42,
    () => null,
    new Map(),
    { [Symbol.toStringTag]: "Array" },
  ])("rejects non-plain values: %j", (value) => {
    expect(isPlainObject(value)).toBe(false);
  });

  it("accepts object-tag values with an explicit Object toStringTag", () => {
    expect(isPlainObject({ [Symbol.toStringTag]: "Object" })).toBe(true);
  });
});
