суббота, 27 июня 2015 г.

ToDo. Сделать тесты к скриптовым словам

Примерно так:

 operator EVAL
 // - оператор вычисляющий значение aWhat
  RIGHT IN aWhat
  aWhat |^ DO
 ; // EVAL 

  EVAL %Tests 'тесты к оператору EVAL'
  (
  // - это тесты к оператору EVAL
   : T1
    EVAL 1 PrintStack
   ; // T1

   : T2
    EVAL '2' PrintStack
   ; // T2

   : T3
    VAR X
    X := 1
    EVAL X PrintStack
   ; // T3

   : T4
    EVAL ( 123 456 ) PrintStack
   ; // T4

   : T5
    EVAL ( 123 456 + ) PrintStack
   ; // T5

   : T6
    EVAL ( 1 2 + ) == 3 ASSERTS
   ; // T6

   : T7
    EVAL ( 'A' 'B' Cat ) == 'AB' ASSERTS
   ; // T7

  ) // EVAL %Tests


И получаем поддерево тестов в DUnit:

EVAL - тесты к оператору EVAL
 T1
 T2
 T3
 T4
 T5
 T6
 T7

Ну и "паранойя":

 + %Tests 'Тесты к оператору +'
 (
  : T1
   1 2 + == 3 ASSERT
  ; // T1

  : T2
   1 -2 + == -1 ASSERT
  ; // T2

  : T3
   VAR A A := 1
   VAR B B := 2
   A B + == 3 ASSERT
  ; // T3

  : T4
   VAR A A := 1
   VAR B B := 2
   VAR C C := 3
   A B + == C ASSERT
  ; // T4

 ) // + %Tests

И получаем поддерево тестов в DUnit:

+ - Тесты к оператору +
 T1
 T2
 T3
 T4

 ARRAY %Tests 'Тесты к оператору ARRAY'
 (
   : T1
    [ ] PrintStack
   ; // T1

   : T2
    [ 1 2 ] PrintStack
   ; // T2

   : T3
    [ 1 2 3 ] PrintStack
   ; // T3

   : T4
    [ 1 2 3 ] Revert PrintStack
   ; // T4

   : T5
    [ 1 2 2 3 1 3 5 6 7 ] RemoveDup PrintStack
   ; // T5

   : T6
    ARRAY VAR A
    A := [ 1 2 2 3 1 3 5 6 7 ] 
    A RemoveDup PrintStack
   ; // T6

   : T7
    ARRAY VAR A
    A := [ 1 2 2 3 1 3 5 6 7 ] 
    A RemoveDup ==> Print
   ; // T7

 ) // ARRAY %Tests

Надеюсь, что мысль понятна.

Есть функционал и есть "атомарные тесты" к нему.

Я думаю, что это "до меня" уже сотни людей придумали.

По-моему - прикольно. Главное, что всё почти уже реализовано.

Осталось только в DUnit зарегистрировать.

Т.е. в ЛЮБОМ приложении, которое включает в себя эти слова и DUnit - получаем отдельную ветку с тестами к словам.

Слово %Tests выглядит примерно так:

 VOID operator %Tests
  LEFT IN aWord
  RIGHT IN aDoc
  RIGHT IN aTests

  VAR l_Group

  DUnit:AddTestsGroup aWord aDoc >>> l_Group

  aCode MembersIterator ==> ( IN aTest
   l_Group DUnit:TestsGroup:AddTest aTest
  )
 ; // %Tests

+Михаил Костицын
+Виктор Морозов
+Vsevolod Leonov
+Igor Belyh
+Николай Зверев
+Yaroslav Brovin
+Денис Мартьянов
+Марин Мирою

Можно пойти дальше:

 'TControl' RTTIObject %Tests 'Тесты к классу TControl'
 (
  : T1
   OBJECT VAR l_Control
   'TControl' RTTIClass 'Create' RTTIConstructor RTTIExecute [ nil { - Это Owner} ] >>> l_Control
   CONST cName 'MyControl'
   'TControl' RTTIClass 'Name' RTTIProperty l_Control RTTISet [ cName { - Это значение Name } ]
   STRING VAR l_Name
   'TControl' RTTIClass 'Name' RTTIProperty l_Control RTTIGet >>> l_Name
   l_Name == cName ASSERT
  ; // T1
 )

Комментариев нет:

Отправить комментарий