1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
\unset ECHO
\i test/setup.sql
SET client_min_messages = warning;
CREATE SCHEMA whatever;
CREATE TABLE whatever.foo ( id serial primary key );
-- Make sure we get test function names.
SET client_min_messages = notice;
CREATE OR REPLACE FUNCTION whatever.testthis() RETURNS SETOF TEXT AS $$
SELECT collect_tap(ARRAY[
pass('simple pass'),
pass('another simple pass')
]);
$$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION whatever.testplpgsql() RETURNS SETOF TEXT AS $$
BEGIN
RETURN NEXT pass( 'plpgsql simple' );
RETURN NEXT pass( 'plpgsql simple 2' );
INSERT INTO whatever.foo VALUES(1);
RETURN NEXT is( MAX(id), 1, 'Should be a 1 in the test table') FROM whatever.foo;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION whatever.testplpgsqldie() RETURNS SETOF TEXT AS $$
BEGIN
RETURN NEXT pass( 'plpgsql simple' ); -- Won't appear in results.
RETURN NEXT pass( 'plpgsql simple 2' ); -- Won't appear in results.
INSERT INTO whatever.foo VALUES(1);
RETURN NEXT is( MAX(id), 1, 'Should be a 1 in the test table') FROM whatever.foo;
IF pg_version_num() >= 90300 THEN
EXECUTE $E$
CREATE OR REPLACE FUNCTION __die() RETURNS VOID LANGUAGE plpgsql AS $F$
BEGIN
RAISE EXCEPTION 'This test should die, but not halt execution.
Note that in some cases we get what appears to be a duplicate context message, but that is due to Postgres itself.'
USING
DETAIL = 'DETAIL',
COLUMN = 'COLUMN',
CONSTRAINT = 'CONSTRAINT',
DATATYPE = 'TYPE',
TABLE = 'TABLE',
SCHEMA = 'SCHEMA';
END;
$F$;
$E$;
ELSIF pg_version_num() >= 80400 THEN
EXECUTE $E$
CREATE OR REPLACE FUNCTION __die() RETURNS VOID LANGUAGE plpgsql AS $F$
BEGIN
RAISE EXCEPTION 'This test should die, but not halt execution.
Note that in some cases we get what appears to be a duplicate context message, but that is due to Postgres itself.'
USING DETAIL = 'DETAIL';
END;
$F$;
$E$;
ELSE
EXECUTE $E$
CREATE OR REPLACE FUNCTION __die() RETURNS VOID LANGUAGE plpgsql AS $F$
BEGIN
RAISE EXCEPTION 'This test should die, but not halt execution.
Note that in some cases we get what appears to be a duplicate context message, but that is due to Postgres itself.';
END;
$F$;
$E$;
END IF;
EXECUTE 'SELECT __die();';
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION whatever.testy() RETURNS SETOF TEXT AS $$
SELECT collect_tap(ARRAY[
pass('pass'),
fail('this test intentionally fails')
]);
$$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION whatever.testnada() RETURNS SETOF TEXT AS $$
BEGIN
-- Do nothing.
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION whatever.testz() RETURNS SETOF TEXT AS $$
SELECT is( MAX(id), NULL, 'Late test should find nothing in the test table') FROM whatever.foo;
$$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION whatever."test ident"() RETURNS SETOF TEXT AS $$
BEGIN
RETURN NEXT pass( 'ident' );
RETURN NEXT pass( 'ident 2' );
END;
$$ LANGUAGE plpgsql;
-- Run the actual tests. Yes, it's a one-liner!
SELECT * FROM runtests('whatever'::name);
ROLLBACK;
|