Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2334 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores
Postado

Olá a todos!

De acordo com outros tópicos que estão orientando a migração para compiladores mais modernos.

Quero na medida do possível ajudar para que o código fique cada fez melhor e com menos hints e Warnings.

Colei abaixo um exemplo do que estou dizendo.

Citar

[Hint] ACBrUtil.pas(533): Value assigned to 'P2F' never used
[Hint] ACBrUtil.pas(532): Value assigned to 'P1F' never used
[Hint] ACBrUtil.pas(3224): Value assigned to 'PosIni' never used
[Hint] ACBrPAFClass.pas(76): Private symbol 'Insert' declared but never used
[Hint] ACBrPAFClass.pas(300): Private symbol 'Insert' declared but never used
[Warning] Unit 'ACBrZLibEx' implicitly imported into package 'ACBr_Comum'
[Warning] Unit 'ACBrZLibExApi' implicitly imported into package 'ACBr_Comum'
 

  Esse exemplo acima foi gerado na instalação do package ACBr_Diversos no D7;

Mas ele não mostra nem uma parte dos alertas que a IDE mais nova mostra.

Como apresenta no trecho abaixo.

Citar

[dcc32 Warning] ACBrZLibExGZ.pas(1023): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(531): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(531): W1058 Implicit string cast with potential data loss from 'Char' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(531): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(531): W1058 Implicit string cast with potential data loss from 'Char' to 'AnsiString'
[dcc32 Hint] ACBrUtil.pas(533): H2077 Value assigned to 'P2F' never used
[dcc32 Hint] ACBrUtil.pas(532): H2077 Value assigned to 'P1F' never used
[dcc32 Warning] ACBrUtil.pas(738): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(744): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(829): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(833): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(841): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(846): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(858): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(885): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(897): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(899): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(904): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(905): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(947): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(950): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(951): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(961): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(965): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(965): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(1572): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Warning] ACBrUtil.pas(1581): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Warning] ACBrUtil.pas(1598): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Warning] ACBrUtil.pas(1660): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Warning] ACBrUtil.pas(1870): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(1870): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(1871): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(1898): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(1898): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(1924): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(1942): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(1942): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(1970): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(1986): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(2010): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(2010): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(2826): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(2862): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'
[dcc32 Warning] ACBrUtil.pas(2946): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Warning] ACBrUtil.pas(2954): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Hint] ACBrUtil.pas(3224): H2077 Value assigned to 'PosIni' never used
[dcc32 Warning] ACBrUtil.pas(3320): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Warning] ACBrUtil.pas(3436): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[dcc32 Hint] ACBrPAFClass.pas(76): H2219 Private symbol 'Insert' declared but never used

No exemplo acima é apenas uma parte, em alguns projetos chego ter acima de 2 mil avisos desses.

Sei que a IDE faz o cast forçado, mas no entanto isso para um controle do código final fica muito mais limpo e de fácil manutenção.

Não fiz nenhuma alteração ainda pois depende da abordagem e da importância que os cordeadores e mantenedores das units tomarão.

 

  • Consultores
Postado

Já é de nosso conhecimento que o ACBr produz muito mais Warnings e Hints que deveria. Mas precisamos de voluntários para ajudar nisso.

Relacionado:

 

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado (editado)
Citar
Citar
Citar

 

 

EMBarbosa

 

Qual a melhor abordagem?

Teremos um trunk3?

Vou iniciar por units com esse tipo de hint:

[dcc32 Hint] ACBrUtil.pas(3224): H2077 Value assigned to 'PosIni' never used;

Nesse outro tipo:

[dcc32 Warning] ACBrUtil.pas(1898): W1057 Implicit string cast from 'AnsiString' to 'string'

Podemos mudar o tipo para string pois cada IDE usa conforme precisa e usar AnsiString só nos casos bem específicos!

 

Editado por Waldir Paim
Melhor formatação.
  • Consultores
Postado
1 hora atrás, Waldir Paim disse:

 

Qual a melhor abordagem?

Teremos um trunk3?

Não por agora.

1 hora atrás, Waldir Paim disse:

Vou iniciar por units com esse tipo de hint:

[dcc32 Hint] ACBrUtil.pas(3224): H2077 Value assigned to 'PosIni' never used

Daí você pode anexar as units alteradas para teste.

 

1 hora atrás, Waldir Paim disse:

Nesse outro tipo:

[dcc32 Warning] ACBrUtil.pas(1898): W1057 Implicit string cast from 'AnsiString' to 'string'

Podemos mudar o tipo para string pois cada IDE usa conforme precisa e usar AnsiString só nos casos bem específicos!

Tome cuidado pois principalmente os componentes da paleta ACBrSerial fazem uso de comunicação serial e usam AnsiString no lugar de um Array of Bytes.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Vamos fazer unit a unit para evitar qualquer tipo de surpresa.

Citar

Para essa reforma, não faz sentido considerar os Warnings de D7 ou IDEs sem suporte a UTF8/Unicode

Citei o exemplo para mostrar o tamanho do problema nas IDEs mais novas.

Citar

Lembrem-se de sempre testar a compilação no Lazarus/FPC

Sem problemas.

  • Moderadores
Postado

Na medida do possível e para garantir que as alterações não gerem efeitos colaterais vou criando os Teste Case e enviar junto com as units.

Dessa forma os usuários  das diversas IDEs e plataforma atendidas pode ajudar e rodar os testes.

Vou me focar nesse momento na unit ACBrUtil.pas para iniciar essa tarefa.

  • Moderadores
Postado

 

Citar

Repare que já existe uma pasta "Testes", com vários teste cases para DUNIT e FPCUnit

Daniel,

Vou usar os testes existentes e na medida do possível acrescentar o que falta.

Eu tentei compilar os testes no Sealte e eles não rodaram, acredito que vai ser preciso alguma alteração.

Nos fontes:

Fiz umas alterações que já removem uma pequena parte dos hints e acredito que não quebrem o código existente.

No código em si alterei muito pouca coisa, só na ACBrUtil.pas a remoção de atribuição de valores que o compilador disse que não estava sendo usado.

Nas units do ACBrBoleto inclui no Uses a unit Contnrs que essas IDEs mais novas pedem para incluir.

Nas units do Sped só inclui alguns override que a IDE pediu.

ACBrBancoCaixaSICOB.pas

ACBrBancoSantander.pas

ACBrBancoCaixa.pas

ACBrBancoSicredi.pas

ACBrBancoItau.pas

ACBrBancoBrasil.pas

ACBrUtil.pas

ACBrEFDBloco_0.pas

ACBrSpedFiscal.pas

ACBrEFDBloco_K_Class.pas

ACBrEFDBloco_H_Class.pas

ACBrEFDBloco_G_Class.pas

ACBrEFDBloco_D_Class.pas

ACBrEFDBloco_C_Class.pas

ACBrEFDBloco_9_Class.pas

ACBrEFDBloco_1_Class.pas

ACBrEFDBloco_0_Class.pas

ACBrEFDBloco_E_Class.pas

ACBrEPCBloco_0.pas

ACBrEPCBloco_M.pas

ACBrEPCBloco_I_Class.pas

ACBrEPCBloco_P_Class.pas

ACBrEPCBloco_F_Class.pas

ACBrEPCBloco_D_Class.pas

ACBrEPCBloco_A_Class.pas

ACBrEPCBloco_9_Class.pas

ACBrEPCBloco_1_Class.pas

ACBrEPCBloco_M_Class.pas

ACBrEPCBloco_0_Class.pas

ACBrEPCBloco_C.pas

  • Moderadores
Postado

Será que podemos adotar esses casts nas strings ou alguem quer sugerir mais alguma solução?

Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação

Estou migrando a  CharInSet para dentro do ACBrUtil.pas;

 

{$IFNDEF COMPILER12_UP}
 function CharInSet(C: AnsiChar; const CharSet: TSysCharSet): Boolean;
{$ENDIF}

Dessa forma uma parte do hints a gente mata com essa função também.

Fico no aguardo da definição sobre os casts nas strings.

 

Nas untis do ACBrBoleto temos essa situação!

Citar

   if copy(Linha, 14, 1) = 'T' then // se for segmento T cria um novo titulo
       Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista;

      with Titulo do
     begin
       if copy(Linha, 14, 1) = 'T' then
       begin
         SeuNumero       := copy(Linha, 106, 25);

No treco acima ele reclama que a variável Titulo não foi inicializada.

Pretendo mudar para:

Citar

    Titulo  := nil;

     if copy(Linha, 14, 1) = 'T' then // se for segmento T cria um novo titulo
       Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista;

    if Assigned(Titulo ) then

    with Titulo do
     begin
       if copy(Linha, 14, 1) = 'T' then
       begin
         SeuNumero       := copy(Linha, 106, 25);

Dessa forma ele para de reclamar e se não instanciar ele também não gera um AV.

  • Fundadores
Postado

A modificação está correta... (o código não estava escrito de uma maneira segura)

Vou analisar as Units anexadas... e testar no Lazarus...

 

TSysCharSet, existirá nas versões inferiores a COMPILER12_UP ?

Não vejo como adicionar esse método irá remover warnings, afinal nas versões antigas ele não existe e a IDE não reclama...

os Hints/Warnings ocorrem nas novas IDEs onde já existe o método: CharInSet e ele não está sendo usado..

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Moderadores
Postado

Na unit SysUtils;

do Delphi 7 tem sim.

Citar


type

{ Standard Character set type }

  TSysCharSet = set of Char;
 

Em IDEs inferior D7 da para fazer igual foi feito em ACBrUtil :


{ PosEx, retirada de StrUtils.pas do D7, para compatibilizar com o Delphi 6
  (que nao possui essa funçao) }
{$IFNDEF COMPILER7_UP}
function PosEx(const SubStr, S: AnsiString; Offset: Cardinal = 1): Integer;
{$ENDIF}

 

Citar

Não vejo como adicionar esse método irá remover warnings, afinal nas versões antigas ele não existe e a IDE não reclama...

os Hints/Warnings ocorrem nas novas IDEs onde já existe o método: CharInSet e ele não está sendo usado..

Daniel, a inclusão da função em si realmente não remove, mas podemos mudar essas funções:

De: 

{-----------------------------------------------------------------------------
 *** Extraido de JclStrings.pas  - Project JEDI Code Library (JCL) ***
  Retorna <True> se <C> é Alpha maiusculo/minusculo 
 ---------------------------------------------------------------------------- }
function CharIsAlpha(const C: Char): Boolean;
begin
  Result := ( C in ['A'..'Z','a'..'z'] ) ;
end ;

{-----------------------------------------------------------------------------
 *** Extraido de JclStrings.pas  - Project JEDI Code Library (JCL) ***
  Retorna <True> se <C> é Númerico 
 ---------------------------------------------------------------------------- }
function CharIsNum(const C: Char): Boolean;
begin
  Result := ( C in ['0'..'9'] ) ;
end ;

{-----------------------------------------------------------------------------
 *** Extraido de JclStrings.pas  - Project JEDI Code Library (JCL) ***
  Retorna <True> se <C> é Alpha maiusculo/minusculo ou Numerico
 ---------------------------------------------------------------------------- }
function CharIsAlphaNum(const C: Char): Boolean;
begin
  Result := ( CharIsAlpha( C ) or CharIsNum( C ) );
end ;

{-----------------------------------------------------------------------------
  Retorna <True> se <C> é um char hexa válido
 ---------------------------------------------------------------------------- }
function CharIsHexa(const C: Char): Boolean;
begin
  Result := ( C in ['0'..'9','A'..'F','a'..'f'] ) ;
end;

 Para: 

{-----------------------------------------------------------------------------
 *** Extraido de JclStrings.pas  - Project JEDI Code Library (JCL) ***
  Retorna <True> se <C> é Alpha maiusculo/minusculo 
 ---------------------------------------------------------------------------- }
function CharIsAlpha(const C: Char): Boolean;
begin
  Result := CharInSet(C, ['A'..'Z','a'..'z'] ) ;
end ;

{-----------------------------------------------------------------------------
 *** Extraido de JclStrings.pas  - Project JEDI Code Library (JCL) ***
  Retorna <True> se <C> é Númerico 
 ---------------------------------------------------------------------------- }
function CharIsNum(const C: Char): Boolean;
begin
  Result := CharInSet( C, ['0'..'9'] ) ;
end ;

{-----------------------------------------------------------------------------
 *** Extraido de JclStrings.pas  - Project JEDI Code Library (JCL) ***
  Retorna <True> se <C> é Alpha maiusculo/minusculo ou Numerico
 ---------------------------------------------------------------------------- }
function CharIsAlphaNum(const C: Char): Boolean;
begin
  Result := ( CharIsAlpha( C ) or CharIsNum( C ) );
end ;

{-----------------------------------------------------------------------------
  Retorna <True> se <C> é um char hexa válido
 ---------------------------------------------------------------------------- }
function CharIsHexa(const C: Char): Boolean;
begin
  Result := CharInSet( C , ['0'..'9','A'..'F','a'..'f'] ) ;
end;

Alem de que já vi dentro de outras Units o $IFDEF para utilizar a função sitada.

 

  • Fundadores
Postado

Essa mudança pode quebrar a compilação do Lazarus... (que também não contém o método "CharInSet")

Por favor poste sua sugestão de correção para a ACBrUtil que faço alguns testes...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Moderadores
Postado

Eu acho que tem sim:

Citar

    Copyright (C) 2002 by Florian Klaempfl

    See the file COPYING.FPC, included in this distribution,
    for details about the copyright.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    *********************************************************************
}

function Trim(const S: widestring): widestring;
function TrimLeft(const S: widestring): widestring;
function TrimRight(const S: widestring): widestring;

function WideUpperCase(const s : WideString) : WideString;{$ifdef SYSUTILSINLINE}inline;{$endif}
function WideLowerCase(const s : WideString) : WideString;{$ifdef SYSUTILSINLINE}inline;{$endif}
function WideCompareStr(const s1, s2 : WideString) : PtrInt;{$ifdef SYSUTILSINLINE}inline;{$endif}
function WideSameStr(const s1, s2 : WideString) : Boolean;{$ifdef SYSUTILSINLINE}inline;{$endif}
function WideCompareText(const s1, s2 : WideString) : PtrInt;{$ifdef SYSUTILSINLINE}inline;{$endif}
function WideSameText(const s1, s2 : WideString) : Boolean;{$ifdef SYSUTILSINLINE}inline;{$endif}

Function WideFormat (Const Fmt : WideString; const Args : Array of const) : WideString;
Function WideFormat (Const Fmt : WideString; const Args : Array of const; Const FormatSettings: TFormatSettings) : WideString;
Function WideFormatBuf (Var Buffer; BufLen : Cardinal; Const Fmt; fmtLen : Cardinal; Const Args : Array of const) : Cardinal;
Function WideFormatBuf (Var Buffer; BufLen : Cardinal; Const Fmt; fmtLen : Cardinal; Const Args : Array of const; Const FormatSettings: TFormatSettings) : Cardinal;
Procedure WideFmtStr(Var Res: WideString; Const Fmt : WideString; Const args: Array of const);
Procedure WideFmtStr(Var Res: WideString; Const Fmt : WideString; Const args: Array of const; Const FormatSettings: TFormatSettings);

function StrLen(p: pwidechar): sizeint; external name 'FPC_PWIDECHAR_LENGTH'; overload;

function StrCopy(Dest, Source: PWideChar): PWideChar; overload;
function StrLCopy(Dest,Source: PWideChar; MaxLen: SizeInt): PWideChar; overload;
Function CharInSet(Ch:WideChar;Const CSet : TSysCharSet) : Boolean;   <<<<<<aqui
function WideStringReplace(const S, OldPattern, NewPattern: WideString;  Flags: TReplaceFlags): WideString;                 

 

Segue unit ACBrUtil.pas alterada.

ACBrUtil.pas

  • Fundadores
Postado

Só existe na versão 3 do FPC... mas não vejo problema em implementá-la no ACBrUtil com IFDEFs

Function CharInSet(Ch:AnsiChar;Const CSet : TSysCharSet) : Boolean; inline;
begin
  result:=ch in CSet;
end;

Estou aplicando várias modificações na ACBrUtil e Fortes Report CE, para compatibilizar com o FPC 3.0.0

Após terminar isso, faço o merge com as suas modificações

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Moderadores
Postado

Daniel,

Para gente não ficar com um numero muito grande de units alteradas vou aguardar a sua definição para continuar.

Conversa ai com os outros mantenedores sobre a questão dos casts nas strings se vamos aplicar ou agir de outra maneira.

  • Consultores
Postado
19 horas atrás, Waldir Paim disse:

 

Daniel,

Vou usar os testes existentes e na medida do possível acrescentar o que falta.

Eu tentei compilar os testes no Sealte e eles não rodaram, acredito que vai ser preciso alguma alteração.

Waldir,

   crie um novo tópico sobre os problemas que encontrou com os testes unitários existentes. A gente pode tentar verificar isso primeiro.

Seria muito melhor ter os testes funcionando antes de fazer essas alterações.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

EMBarbosa,

Acredito que entendi o motivo do erro!

Antes faltava o DUnit, baixei ele nesse link https://sourceforge.net/projects/dunit/

No D7 rodou 100%.

Mas como disse no Sealte apresenta alguns erros;

Veja:

Nesse trecho da unit GUITestRunner.


procedure TGUITestRunner.FormCreate(Sender: TObject);
begin
  inherited;
  FTests := TInterfaceList.Create;
  LoadConfiguration;

  TimeSeparator := ':';
  SetUpStateImages;
  SetupCustomShortcuts;
  TestTree.Items.Clear;
  EnableUI(false);
  ClearFailureMessage;
  FUpdateTimer := TTimer.Create(Self);
  FUpdateTimer.Interval := 200;
  FUpdateTimer.Enabled := False;
  FUpdateTimer.OnTimer := OnUpdateTimer;
  Setup;

  {$IFDEF VER180} //FastMM built in already
    FailTestCaseIfMemoryLeakedAction.Enabled := True;
    ReportMemoryLeaksOnShutdown := ReportMemoryLeakTypeOnShutdownAction.Checked;
  {$ELSE}

Apresenta esse erro:

Citar

[dcc32 Warning] TestFramework.pas(2817): W1057 Implicit string cast from 'AnsiString' to 'string'
[dcc32 Error] GUITestRunner.pas(1237): E2003 Undeclared identifier: 'TimeSeparator'
[dcc32 Fatal Error] ACBrComumTestCases.dpr(20): F2063 Could not compile used unit 'GUITestRunner.pas'
Failed

O Sealte tem embutido o DUnit e acredito que alguns $IFDEFs devem resolve.

 

Vou reservar um tempo e ver se consigo fazer os Testes rodar no Sealte usando o DUnit nativo.

Se conseguir crio o outro tópico para tratar desse assunto.

  • Consultores
Postado
10 horas atrás, Waldir Paim disse:

[dcc32 Error] GUITestRunner.pas(1237): E2003 Undeclared identifier: 'TimeSeparator'

http://docwiki.embarcadero.com/RADStudio/XE8/en/Global_Variables

http://stackoverflow.com/q/25109497/460775

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Fundadores
Postado

Mas acho que esse erro ocorre na DUnit que está no Sourceforge, nas novas IDEs do Delphi... no XE7 tb esbarrei nesse erro...

Depois que removi a DUnit do SourceForge e passei a usar a DUNIT que vem no XE7, funcionou a contento...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Enviei para o SVN, as modificações que eu tinha para a ACBrUtil.pas... e já inseri a "CharInSet"...

Poderia por favor reavaliar as suas modificações, nessa nova versão da ACBrUtil ?  Obrigado pela ajuda...

Em 01/03/2016 at 18:34, Waldir Paim disse:

Nas units do ACBrBoleto inclui no Uses a unit Contnrs que essas IDEs mais novas pedem para incluir.

Porque isso é necessário ?  Qual método não é encontrado ? Como aparece a "Warning" a respeito dessa Unit ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Moderadores
Postado

Aqui rodou sem problemas.

Aproveitei e já inclui mais algumas unit que faltaram.

Junto compactei a pasta com as units alteradas.

Na ACBrUtil.pas utilizei a CharInSet, fiz isso nas outras também.

Na unit ACBrEPCBloco_C_Class ainda passou uma procedure LimpaRegistros; override;

Na unit ACBrCMC7.pas publiquei a function CalcDigitoCMC7 e usei CharInSet.

Na unit ACBrValidador.pas publiquei a function MascaraIE e usei CharInSet.

Tirando essas mensagem ficam praticamente as mensagens W1058 e W1057 que ainda precisamos definir qual será o tratamento e muito poucas das Units do ACBrBoleto que indicam outros tratamentos.

Fontes.zip

ACBrUtil.pas

ACBrDFeCapicomDelphiSoap.pas

ACBrDFeOpenSSL.pas

ACBrCMC7.pas

ACBrValidador.pas

ACBrDevice.pas

ACBrSocket.pas

ACBrEPCBloco_C_Class.pas

pcnAuxiliar.pas

  • Curtir 1
  • Este tópico foi criado há 2334 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.