demo_categories.pp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. program test_categories;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils, Classes, syntax.highlighter, syntax.pascal;
  5. procedure TestCategorySystem;
  6. var
  7. highlighter: TSyntaxHighlighter;
  8. tokens: TSyntaxTokenArray;
  9. categories: TStringList;
  10. i: Integer;
  11. pascalCategoryID: Integer;
  12. begin
  13. WriteLn('Testing Category System');
  14. WriteLn('=======================');
  15. WriteLn;
  16. // Test category registration
  17. pascalCategoryID := TSyntaxHighlighter.RegisterCategory('Pascal');
  18. WriteLn('Pascal category registered with ID: ', pascalCategoryID);
  19. // Test duplicate registration
  20. if TSyntaxHighlighter.RegisterCategory('Pascal') = pascalCategoryID then
  21. WriteLn('PASS - Duplicate registration returns same ID')
  22. else
  23. WriteLn('FAIL - Duplicate registration issue');
  24. // Test category retrieval
  25. if TSyntaxHighlighter.GetRegisteredCategoryID('Pascal') = pascalCategoryID then
  26. WriteLn('PASS - Category ID retrieval works')
  27. else
  28. WriteLn('FAIL - Category ID retrieval failed');
  29. // Test non-existent category
  30. if TSyntaxHighlighter.GetRegisteredCategoryID('NonExistent') = -1 then
  31. WriteLn('PASS - Non-existent category returns -1')
  32. else
  33. WriteLn('FAIL - Non-existent category handling');
  34. WriteLn;
  35. // Test category listing
  36. categories := TStringList.Create;
  37. try
  38. TSyntaxHighlighter.GetRegisteredCategories(categories);
  39. WriteLn('Registered categories:');
  40. for i := 0 to categories.Count - 1 do
  41. WriteLn(' ', categories[i], ' = ', PtrInt(categories.Objects[i]));
  42. finally
  43. categories.Free;
  44. end;
  45. WriteLn;
  46. // Test token categorization
  47. highlighter := TSyntaxHighlighter.Create;
  48. try
  49. tokens := highlighter.Execute('begin end');
  50. WriteLn('Token categorization test:');
  51. for i := 0 to High(tokens) do begin
  52. if tokens[i].HasCategory(pascalCategoryID) then
  53. WriteLn(' Token "', tokens[i].Text, '" has correct Pascal category ID')
  54. else
  55. WriteLn(' Token "', tokens[i].Text, '" has wrong category ID: ', tokens[i].CategoriesAsString);
  56. end;
  57. finally
  58. highlighter.Free;
  59. end;
  60. end;
  61. begin
  62. TestCategorySystem;
  63. WriteLn;
  64. WriteLn('Category test completed.');
  65. end.