import { expectTypeOf, test } from 'vp/test' import type { Abi, AbiConstructor, AbiError, AbiEvent, AbiFallback, AbiFunction, AbiReceive, } from 'abitype' import type { FormatAbiItem } from './formatAbiItem.js' import { formatAbiItem } from './formatAbiItem.js' test('FormatAbiItem', () => { expectTypeOf>().toEqualTypeOf() expectTypeOf>().toEqualTypeOf() expectTypeOf>().toEqualTypeOf() expectTypeOf>().toEqualTypeOf() expectTypeOf>().toEqualTypeOf() expectTypeOf>().toEqualTypeOf() expectTypeOf>().toEqualTypeOf() expectTypeOf< FormatAbiItem<{ readonly name: 'foo' readonly type: 'function' readonly stateMutability: 'nonpayable' readonly inputs: readonly [] readonly outputs: readonly [] }> >().toEqualTypeOf<'function foo()'>() expectTypeOf< FormatAbiItem<{ readonly name: 'address' readonly type: 'function' readonly stateMutability: 'nonpayable' readonly inputs: readonly [] readonly outputs: readonly [] }> >().toEqualTypeOf<'function [Error: "address" is a protected Solidity keyword.]()'>() expectTypeOf< FormatAbiItem<{ readonly name: 'Transfer' readonly type: 'event' readonly inputs: readonly [ { readonly name: 'from' readonly type: 'address' readonly indexed: true }, { readonly name: 'to' readonly type: 'address' readonly indexed: true }, { readonly name: 'amount' readonly type: 'uint256' }, ] }> >().toEqualTypeOf<'event Transfer(address indexed from, address indexed to, uint256 amount)'>() }) test('formatAbiItem', () => { expectTypeOf( formatAbiItem({ name: 'foo', type: 'function', stateMutability: 'nonpayable', inputs: [], outputs: [], }), ).toEqualTypeOf<'function foo()'>() expectTypeOf( formatAbiItem({ name: 'foo', type: 'function', stateMutability: 'nonpayable', inputs: [ { type: 'tuple', components: [ { type: 'string', }, ], }, { type: 'address', }, ], outputs: [], }), ).toEqualTypeOf<'function foo((string), address)'>() const abiItem: Abi[number] = { type: 'function', name: 'foo', inputs: [], outputs: [], stateMutability: 'nonpayable', } expectTypeOf(formatAbiItem(abiItem)).toEqualTypeOf() expectTypeOf( formatAbiItem({ type: 'fallback', stateMutability: 'nonpayable' }), ).toEqualTypeOf<'fallback() external'>() expectTypeOf( formatAbiItem({ type: 'fallback', stateMutability: 'payable' }), ).toEqualTypeOf<'fallback() external payable'>() })