Skip to content

Commit 27b8730

Browse files
committed
Documentação da shellunity
1 parent c61ab0c commit 27b8730

File tree

3 files changed

+664
-0
lines changed

3 files changed

+664
-0
lines changed

doc/shellunity-dev.1

Lines changed: 317 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,317 @@
1+
.TH SHELLUNITY-DEV "17 ABR 2022" "Versão 0.1.0" "SHELLUNITY-DEV Manual de uso"
2+
3+
.SH NOME
4+
shellunity-dev - Documentação do desenvolvedor
5+
6+
.SH VARIÁVEIS GLOBAIS
7+
A biblioteca shellunity utiliza as seguintes variáveis globais:
8+
9+
.BR NUMBER_OF_TESTS_UNITY,
10+
armazena o número total de testes realizados.
11+
12+
.BR NUMBER_OF_FAILURES_UNITY,
13+
armazena o número total de testes que falharam.
14+
15+
.BR NUMBER_OF_IGNORED_UNITY,
16+
armazena o número total de testes ignorados
17+
18+
.BR FINISHED_ALL_TESTS_UNITY,
19+
variável de controle para indicar se os testes foram finalizados. Seu valor é igual a zero se ainda faltar testes para realizar.
20+
21+
.BR TEST_IGNORE_UNITY,
22+
configura a função TEST_UNITY para ignorar todos os testes se estiver definida como 1, ou para realizar todos os testes se estiver definida como 0.
23+
24+
25+
.SH PRINCIPAIS FUNÇÕES
26+
27+
.BR TEST_UNITY
28+
29+
Esta é a principal função da biblioteca shellunity e que manipula as variáveis globais com os contadores dos testes realizados, que falharam e os ignorados. A cada chamada a esta função, o número total de testes em $NUMBER_OF_TESTS_UNITY é incrementado uma unidade. Se a variável $TEST_IGNORE_UNITY estiver configurada igual a 1, o teste é ignorado e a função incrementa o número de testes ignorados em $NUMBER_OF_IGNORED_UNITY e retorna. Esta lógica é implementada nas linhas a seguir:
30+
31+
NUMBER_OF_TESTS_UNITY=$((NUMBER_OF_TESTS_UNITY+1))
32+
33+
[ "$TEST_IGNORE_UNITY" == "1" ] && {
34+
35+
NUMBER_OF_IGNORED_UNITY=$((NUMBER_OF_IGNORED_UNITY+1))
36+
37+
echo -e "$0:$2:$3:\033[43mIGNORED\033[m"
38+
39+
return
40+
41+
}
42+
43+
O resultado esperado deste trecho é como no exemplo a seguir:
44+
45+
./test_example.sh:38:TEST_PASS:IGNORED
46+
47+
O restante do código da função TEST_UNITY está condicionado pela variável TEST_IGNORE_UNITY ser igual a 0, pois caso contrário a função irá retornar na condicional apresentada acima. O restante da função está condicionado pela variável FINISHED_ALL_TESTS_UNITY que é igual a 0 se todos os testes da suíte de testes ainda não foram realizados. Assim, a função exibe o nome do programa principal da suíte de testes, o número da linha onde o teste foi chamado e o tipo de teste armazenados em $0, $2 e $3, respectivamente, como a seguir:
48+
49+
if [ "$FINISHED_ALL_TESTS_UNITY" == "0" ]
50+
51+
then
52+
53+
echo -n "$0:$2:$3:"
54+
55+
fi
56+
57+
O resultado esperado deste trecho de código é o seguinte:
58+
59+
./test_example.sh:49:TEST_ASSERT_EQUAL_STRING:
60+
61+
./test_example.sh:33:TEST_ASSERT_EQUAL_STRING:
62+
63+
Por fim, a função exibe PASS ou FAIL após as informações exibidas acima, indicando se o teste passou ou não, a depender da variável $1 passada à função TEST_UNITY. Se $1 foi passada com um valor diferente de zero, oque indica que o teste falhou, TEST_UNITY incrementa o valor da variável global $NUMBER_OF_FAILURES_UNITY em uma unidade antes de exibir FAIL na tela do terminal.
64+
65+
if [ "$1" == "0" ]
66+
67+
then
68+
69+
echo -e "\033[42mPASS\033[m"
70+
71+
else
72+
73+
NUMBER_OF_FAILURES_UNITY=$((NUMBER_OF_FAILURES_UNITY+1))
74+
75+
echo -e "\033[41mFAIL\033[m"
76+
77+
fi
78+
79+
O resultado completo é apresentado a seguir:
80+
81+
./test_example.sh:49:TEST_ASSERT_EQUAL_STRING:FAIL
82+
83+
./test_example.sh:33:TEST_ASSERT_EQUAL_STRING:PASS
84+
85+
.BR RESULT_UNITY
86+
87+
Esta função é chamada ao final da execução da suíte de testes, como estabelecido utilizando o comando trap a seguir:
88+
89+
trap RESULT_UNITY exit
90+
91+
O objetivo da função RESULT_UNITY é exibir a contagem final dos casos de testes, apresentando o total dos testes realizados, os testes que falharam (se houver falha em algum teste) e o número de testes ignorados. Para tanto, a função utiliza os valores armazenados nas variáveis globais $NUMBER_OF_TESTS_UNITY, $NUMBER_OF_FAILURES_UNITY, e $NUMBER_OF_IGNORED_UNITY. O resultado esperado a seguir:
92+
93+
-----------------------
94+
95+
16 Tests 7 Failures 2 Ignored
96+
97+
FAIL
98+
99+
As duas últimas linhas da função RESULT_UNITY, apresentadas a seguir, servem para verificar se todos os testes passaram ou se algum teste falhou, fazer a chamada à função TEST_UNITY para imprimir FAIL ou SUCCES na tela e encerrar com o status de execução 0 ou 1, respectivamente. Basta que um dos testes falhe para o status de execução retornado ser 1.
100+
101+
[ "$NUMBER_OF_FAILURES_UNITY" -eq "0" ] && TEST_UNITY 0 && exit 0
102+
103+
TEST_UNITY 1 && exit 1
104+
105+
106+
.SH ASSERÇÕES BÁSICAS
107+
.BR TEST_IGNORE
108+
109+
A função TEST_IGNORE é utilizada para ignorar um bloco de testes. Esta funciona por meio de uma chave "on/off" recebida através do parâmetro $1 que altera a variável global TEST_IGNORE_UNITY. Quando a variável TEST_IGNORE_UNITY é igual a 1 os testes são ignorados pela função principal TEST_UNITY, quando esta variável é igual a 0 os testes são realizados e considerados pela função TEST_UNITY. A utilização da função TEST_IGNORE ocorre como no exemplo de uso a seguir:
110+
111+
TEST_IGNORE on # Ligar a chave para ignorar testes
112+
113+
TEST_ASSERT_TRUE "2==2" #... testes ignorado
114+
115+
TEST_ASSERT_FALSE "2==3" #... teste ignorado
116+
117+
TEST_ASSERT_FALSE "3==3" #... teste ignorado
118+
119+
TEST_IGNORE off # Desligar a chave para ignorar testes
120+
121+
# Os testes a seguir serão realizados
122+
123+
TEST_ASSERT_TRUE "2==2" #... testes realizado
124+
125+
TEST_ASSERT_FALSE "3==3" #... teste realizado
126+
127+
Esta manipulação da variável global TEST_IGNORE_UNITY ocorre dentro de um bloco if simples a depender do parâmetro $1 passado a função TEST_IGNORE_UNITY.
128+
129+
TEST_IGNORE(){
130+
131+
if [ "$1" == "on" ]
132+
133+
then
134+
135+
TEST_IGNORE_UNITY="1"
136+
137+
elif [ "$1" == "off" ]
138+
139+
then
140+
141+
TEST_IGNORE_UNITY="0"
142+
143+
fi
144+
145+
}
146+
147+
.BR TEST_MESSAGE
148+
149+
Esta função exibe uma mensagem na tela do terminal durante os testes. Basta chamar a função e passar a mensagem a ser exibida. Como não há chamada à função TEST_UNITY, nenhum teste é contabilizado quando esta função é chamada. A saída esperada segue abaixo:
150+
151+
./test_example.sh:24:INFO: Mensagem qualquer
152+
153+
.BR TEST_FAIL
154+
155+
Esta função faz o teste falhar quando chamada. Para tanto, ela chama TEST_UNITY internamente passando o status 1 (teste falhou) como variável $1. A função TEST_FAIL a seguir:
156+
157+
TEST_FAIL(){
158+
159+
TEST_UNITY 1 "$BASH_LINENO" "$FUNCNAME"
160+
161+
}
162+
163+
.BR TEST_FAIL_MESSAGE
164+
165+
Esta função faz o teste falhar semelhante a função TEST_FAIL, mas antes exibe uma mensagem de falha passada pelo usuário.
166+
167+
.BR TEST_PASS
168+
169+
Esta função faz o teste passar quando chamada. Para tanto, ela chama TEST_UNITY internamente passando o status 0 (teste passou) como variável $1. A função TEST_PASS a seguir:
170+
171+
TEST_PASS(){
172+
173+
TEST_UNITY 0 "$BASH_LINENO" "$FUNCNAME"
174+
175+
}
176+
177+
.BR TEST_PASS_MESSAGE
178+
179+
Esta função faz o teste passar semelhante a função TEST_PASS, mas antes exibe uma mensagem passada pelo usuário.
180+
181+
.SH ASSERÇÕES
182+
183+
.BR TEST_ASSERT_EQUAL
184+
185+
Esta função serve para verificar igualdade entre dois números recebidos através de $1 e $2. Internamente, esta comparação é realizada com a calculadora bc e retornada para a variável $CONDITION como 1 se os números são iguais e 0 se são diferentes. Daí basta chamar a função TEST_UNITY com o status de execução 0 se $CONDITION é 1 e 1 se $CONDITION é 0.
186+
187+
.BR TEST_ASSERT_NOT_EQUAL
188+
189+
Esta função serve para verificar desigualdade entre dois números recebidos através de $1 e $2. Esta função funciona da mesma forma que a função TEST_ASSERT_EQUAL, porém a condição de verificação é a diferença '!=' e não a igualdade '==' entre os dois números passados. Daí basta chamar a função TEST_UNITY com o status de execução 0 se $CONDITION é 1 (Os números são diferentes) e 1 se $CONDITION é 0 (os números são iguais).
190+
191+
.BR TEST_ASSERT_TRUE
192+
193+
Esta função funciona de modo semelhante a TEST_ASSERT_EQUAL, porém a condicional é passada diretamente através de $1.
194+
195+
.BR TEST_ASSERT_FALSE
196+
197+
Esta função funciona de modo semelhante a TEST_ASSERT_NOT_EQUAL, porém a condicional é passada diretamente através de $1.
198+
199+
.BR TEST_ASSERT_EQUAL_STRING
200+
201+
A verificação de strings é trivial em shell, basta utilizar a seguinte condicional:
202+
203+
[ "$1" == "$2" ]
204+
205+
E daí retornar o status para a função TEST_UNITY, 0 se forem iguais e 1 se forem diferentes.
206+
207+
.SH ASSERÇÕES PARA ARQUIVOS E DIRETÓRIOS
208+
209+
.BR TEST_FILE_FIND
210+
211+
Verifica se o arquivo existe utilizando a seguinte condicional:
212+
213+
[ -f "$1" ]
214+
215+
E daí retorna o status para a função TEST_UNITY, 0 se o arquivo existir e 1 se o arquivo não existir.
216+
217+
.BR TEST_DIR_FIND
218+
219+
Esta asserção verifica se o diretório existe utilizando a seguinte condicional do shell:
220+
221+
[ -d "$1" ]
222+
223+
E daí retorna o status para a função TEST_UNITY, 0 se o diretório existir e 1 se o diretório não existir.
224+
225+
.BR TEST_FILE_X
226+
227+
Esta asserção serve para verificar se o arquivo possui permissão de execução a partir da seguinte condicional do shell:
228+
229+
[ -x "$1" ]
230+
231+
E daí retorna o status para a função TEST_UNITY, 0 se o arquivo tiver permissão de execução e 1 se o arquivo não tiver permissão de execução.
232+
233+
.BR TEST_FILE_W
234+
235+
Esta asserção serve para verificar se o arquivo possui permissão de escrita a partir da seguinte condicional do shell:
236+
237+
[ -w "$1" ]
238+
239+
E daí retorna o status para a função TEST_UNITY, 0 se o arquivo tiver permissão de escrita e 1 se o arquivo não tiver permissão de escrita.
240+
241+
.BR TEST_FILE_R
242+
243+
Esta asserção serve para verificar se o arquivo possui permissão de leitura a partir da seguinte condicional do shell:
244+
245+
[ -r "$1" ]
246+
247+
E daí retorna o status para a função TEST_UNITY, 0 se o arquivo tiver permissão de leitura e 1 se o arquivo não tiver permissão de leitura.
248+
249+
.BR TEST_ISATTY
250+
251+
Esta asserção verifica se a stream de dados passada é um terminal a partir da seguinte condicional do shell:
252+
253+
[ -t "$1" ]
254+
255+
E daí retorna o status para a função TEST_UNITY, 0 se a stream de dados for um terminal e 1 se a stream de dados não for um terminal.
256+
257+
.BR TEST_FILE_NEWER
258+
259+
Esta asserção verifica se o primeiro arquivo $1 é mais novo que o segundo arquivo $2 utilizando a seguinte condicional do shell:
260+
261+
[ "$1" -nt "$2" ]
262+
263+
E daí retorna o status para a função TEST_UNITY, 0 se o primeiro arquivo for mais novo que o segundo e 1 se o primeiro arquivo não for mais novo que o segundo.
264+
265+
.BR TEST_FILE_OLDER
266+
267+
Esta asserção verifica se o primeiro arquivo $1 é mais velho que o segundo arquivo $2 utilizando a seguinte condicional do shell:
268+
269+
[ "$1" -ot "$2" ]
270+
271+
E daí retorna o status para a função TEST_UNITY, 0 se o primeiro arquivo for mais velho que o segundo e 1 se o primeiro arquivo não for mais velho que o segundo.
272+
273+
.BR TEST_FILE_EQUAL
274+
275+
Esta asserção verifica se o primeiro arquivo $1 é o mesmo arquivo $2 passado utilizando a seguinte condicional do shell (útil para verificar se $2 é um hardlink para $1 e vice-versa):
276+
277+
[ "$1" -ef "$2" ]
278+
279+
E daí retorna o status para a função TEST_UNITY, 0 se o primeiro arquivo $1 for o mesmo arquivo em $2 e 1 se o primeiro arquivo $1 não for o mesmo arquivo em $2.
280+
281+
.BR TEST_FILE_EMPTY
282+
283+
Esta asserção verifica se o arquivo passado está vazio utilizando a seguinte condicional do shell:
284+
285+
[ ! -s "$1" ]
286+
287+
E daí retorna o status para a função TEST_UNITY, 0 se o arquivo está vazio e 1 se o arquivo não está vazio.
288+
289+
.SH SUGESTÕES E 'BUG REPORTS'
290+
Qualquer bug encontrado deve ser reportado para o repositório do Github da Biblioteca ShellUnity na aba 'issues' em:
291+
292+
https://github.com/Dirack/ShellUnity/issues
293+
294+
E deve-se notificar por email o responsável pela manutenção do código:
295+
296+
rodolfo_profissional@hotmail.com (Rodolfo Dirack).
297+
298+
Quando reportar um bug é importante explicitar em que situação este foi produzido
299+
para que possa ser reproduzido pelo autor, a versão do programa e toda informação
300+
relevante será bem vinda.
301+
302+
.SH AUTORES
303+
Rodolfo A. C. Neves (Dirack), e o Grupo de Programação Aplicada à Geofísica (GPGEOF).
304+
305+
Contato:
306+
307+
-Página no github (Dirack) https://github.com/Dirack
308+
309+
-Página no github (GPGEOF) https://github.com/gpgeof.
310+
311+
.SH VEJA TAMBÉM
312+
.BR shellunity(1),
313+
.BR shellunity-user(1)
314+
315+
Visite o nosso canal de divulgação científica no Youtube (Geofisicando) em:
316+
317+
https://www.youtube.com/channel/UCi5XD5PCQtPrIRD0H_GJvag

0 commit comments

Comments
 (0)