/usr/share/postgresql/9.6/extension/pgtap--0.93.0--0.94.0.sql is in postgresql-9.6-pgtap 0.97.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | CREATE OR REPLACE FUNCTION pgtap_version()
RETURNS NUMERIC AS 'SELECT 0.94;'
LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE FUNCTION _get_func_privs(TEXT, TEXT)
RETURNS TEXT[] AS $$
BEGIN
IF pg_catalog.has_function_privilege($1, $2, 'EXECUTE') THEN
RETURN '{EXECUTE}';
ELSE
RETURN '{}';
END IF;
EXCEPTION
-- Not a valid func name.
WHEN undefined_function THEN RETURN '{undefined_function}';
-- Not a valid role.
WHEN undefined_object THEN RETURN '{undefined_role}';
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION _fprivs_are ( TEXT, NAME, NAME[], TEXT )
RETURNS TEXT AS $$
DECLARE
grants TEXT[] := _get_func_privs($2, $1);
BEGIN
IF grants[1] = 'undefined_function' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Function ' || $1 || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
$$ LANGUAGE plpgsql;
-- has_table( schema, table )
CREATE OR REPLACE FUNCTION has_table ( NAME, NAME )
RETURNS TEXT AS $$
SELECT ok(
_rexists( 'r', $1, $2 ),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
);
$$ LANGUAGE SQL;
-- hasnt_table( schema, table )
CREATE OR REPLACE FUNCTION hasnt_table ( NAME, NAME )
RETURNS TEXT AS $$
SELECT ok(
NOT _rexists( 'r', $1, $2 ),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist'
);
$$ LANGUAGE SQL;
-- has_foreign_table( schema, table )
CREATE OR REPLACE FUNCTION has_foreign_table ( NAME, NAME )
RETURNS TEXT AS $$
SELECT ok(
_rexists( 'f', $1, $2 ),
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
);
$$ LANGUAGE SQL;
-- hasnt_foreign_table( schema, table )
CREATE OR REPLACE FUNCTION hasnt_foreign_table ( NAME, NAME )
RETURNS TEXT AS $$
SELECT ok(
NOT _rexists( 'f', $1, $2 ),
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' not should exist'
);
$$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION skip ( why text, how_many int )
RETURNS TEXT AS $$
DECLARE
output TEXT[];
BEGIN
output := '{}';
FOR i IN 1..how_many LOOP
output = array_append(
output,
ok( TRUE ) || ' ' || diag( 'SKIP' || COALESCE( ' ' || why, '') )
);
END LOOP;
RETURN array_to_string(output, E'\n');
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION skip ( text )
RETURNS TEXT AS $$
SELECT ok( TRUE ) || ' ' || diag( 'SKIP' || COALESCE(' ' || $1, '') );
$$ LANGUAGE sql;
-- check_test( test_output, pass, name, description, diag, match_diag )
CREATE OR REPLACE FUNCTION check_test( TEXT, BOOLEAN, TEXT, TEXT, TEXT, BOOLEAN )
RETURNS SETOF TEXT AS $$
DECLARE
tnumb INTEGER;
aok BOOLEAN;
adescr TEXT;
res BOOLEAN;
descr TEXT;
adiag TEXT;
have ALIAS FOR $1;
eok ALIAS FOR $2;
name ALIAS FOR $3;
edescr ALIAS FOR $4;
ediag ALIAS FOR $5;
matchit ALIAS FOR $6;
BEGIN
-- What test was it that just ran?
tnumb := currval('__tresults___numb_seq');
-- Fetch the results.
EXECUTE 'SELECT aok, descr FROM __tresults__ WHERE numb = ' || tnumb
INTO aok, adescr;
-- Now delete those results.
EXECUTE 'DELETE FROM __tresults__ WHERE numb = ' || tnumb;
EXECUTE 'ALTER SEQUENCE __tresults___numb_seq RESTART WITH ' || tnumb;
-- Set up the description.
descr := coalesce( name || ' ', 'Test ' ) || 'should ';
-- So, did the test pass?
RETURN NEXT is(
aok,
eok,
descr || CASE eok WHEN true then 'pass' ELSE 'fail' END
);
-- Was the description as expected?
IF edescr IS NOT NULL THEN
RETURN NEXT is(
adescr,
edescr,
descr || 'have the proper description'
);
END IF;
-- Were the diagnostics as expected?
IF ediag IS NOT NULL THEN
-- Remove ok and the test number.
adiag := substring(
have
FROM CASE WHEN aok THEN 4 ELSE 9 END + char_length(tnumb::text)
);
-- Remove the description, if there is one.
IF adescr <> '' THEN
adiag := substring(
adiag FROM 1 + char_length( ' - ' || substr(diag( adescr ), 3) )
);
END IF;
IF NOT aok THEN
-- Remove failure message from ok().
adiag := substring(adiag FROM 1 + char_length(diag(
'Failed test ' || tnumb ||
CASE adescr WHEN '' THEN '' ELSE COALESCE(': "' || adescr || '"', '') END
)));
END IF;
IF ediag <> '' THEN
-- Remove the space before the diagnostics.
adiag := substring(adiag FROM 2);
END IF;
-- Remove the #s.
adiag := replace( substring(adiag from 3), E'\n# ', E'\n' );
-- Now compare the diagnostics.
IF matchit THEN
RETURN NEXT matches(
adiag,
ediag,
descr || 'have the proper diagnostics'
);
ELSE
RETURN NEXT is(
adiag,
ediag,
descr || 'have the proper diagnostics'
);
END IF;
END IF;
-- And we're done
RETURN;
END;
$$ LANGUAGE plpgsql;
|