You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
4.3 KiB

  1. //Imports
  2. const uno = require('../js/uno');
  3. const Game = require('../js/Game');
  4. //Instanz von CARD_COLORS aus uno.js
  5. const CARD_COLORS = uno.CARD_COLORS;
  6. //Speichert Kartenanzahl der jeweiligen Farbe
  7. let green, red, yellow, blue;
  8. //Testet das Generieren von dem Pool mit allen Uno Karten drin
  9. describe('Pool aus Karten generieren', () => {
  10. //Game wird erstellt mit 0 Spielern und ohne Regeln
  11. let game = new Game(0, []);
  12. //Speichert die Art der Karten
  13. let reverse = [],
  14. plus2 = [],
  15. plus4 = [],
  16. skip = [],
  17. chooseColor = [],
  18. normalCards = [];
  19. //Vor jedem durchlauf Kartenanzahl der Farben auf 0 setzen,
  20. //neues Game erstellen
  21. beforeEach(() => {
  22. game = new Game(0, []);
  23. green = 0;
  24. red = 0;
  25. yellow = 0;
  26. blue = 0;
  27. });
  28. //Sortiert alle Karten aus cardPool in Arrays der Art, um später die Überprüfungen auszuführen
  29. game.cardPool.forEach(function (element){
  30. switch (element.name){
  31. case "R":
  32. reverse.push(element);
  33. break;
  34. case "+2":
  35. plus2.push(element);
  36. break;
  37. case "+4":
  38. plus4.push(element);
  39. break;
  40. case "S":
  41. skip.push(element);
  42. break;
  43. case "CC":
  44. chooseColor.push(element);
  45. break;
  46. default:
  47. normalCards.push(element);
  48. break;
  49. }
  50. });
  51. it('Reverse: 2x in jeder Farbe (8)', () => {
  52. //Sortiert reverse nach Farben und speichert in green,red,yellow,blue
  53. getColorAmounts(reverse);
  54. //Jede Farbe muss genau 2 Reverse Karten besitzen
  55. expect(green).toBe(2);
  56. expect(red).toBe(2);
  57. expect(yellow).toBe(2);
  58. expect(blue).toBe(2);
  59. });
  60. it('+2: 2x in jeder Farbe (8)', () => {
  61. //Sortiert plus2 nach Farben und speichert in green,red,yellow,blue
  62. getColorAmounts(plus2);
  63. //Jede Farbe muss genau 2 +2 Karten besitzen
  64. expect(green).toBe(2);
  65. expect(red).toBe(2);
  66. expect(yellow).toBe(2);
  67. expect(blue).toBe(2);
  68. });
  69. it('Skip: 2x in jeder Farbe (8)', () => {
  70. //Sortiert skip nach Farben und speichert in green,red,yellow,blue
  71. getColorAmounts(skip);
  72. //Jede Farbe muss genau 2 Aussetzer(Skip) Karten besitzen
  73. expect(green).toBe(2);
  74. expect(red).toBe(2);
  75. expect(yellow).toBe(2);
  76. expect(blue).toBe(2);
  77. });
  78. it('ChooseColor: 4x', () => {
  79. //Es muss genau 4 Farbwahl-Karten geben
  80. expect(chooseColor.length).toBe(4);
  81. });
  82. it('+4: 4x', () => {
  83. //Es muss genau 4 +4-Karten geben
  84. expect(plus4.length).toBe(4);
  85. });
  86. it('normale Karten: 2x jede 1-9, 4x 0 (76)', () => {
  87. //nimmt 3 Zahlen und testet diese
  88. let zero = 0;
  89. let seven = 0;
  90. let one = 0;
  91. //guckt ob insgesamt 76 normale Karten im Array sind
  92. expect(normalCards.length).toBe(76);
  93. //testet die 3 Zahlen
  94. normalCards.forEach(function (element){
  95. //Anzahl 0len in zero
  96. if(element.name === 0)
  97. zero++;
  98. //Anzahl 7 - Grün in seven
  99. else if(element.name === 7 && element.color === CARD_COLORS[2])
  100. seven++;
  101. //Anzahl 1sen in one
  102. else if(element.name === 1)
  103. one++;
  104. });
  105. //Testet ob genau 4 0len im Deck sind
  106. expect(zero).toBe(4);
  107. //Testet ob 2 Grüne 7ben im Deck sind
  108. expect(seven).toBe(2);
  109. //Testet ob 8 1sen im Deck sind
  110. expect(one).toBe(8);
  111. });
  112. })
  113. //Setzt die Kartenanzahl der Farben für array
  114. function getColorAmounts(array){
  115. //Für jedes Element im übergebenen Array wird für dessen Farbe die dazugehörige Variable um eins erhöht
  116. array.forEach(function (element){
  117. switch (element.color){
  118. case "GREEN":
  119. green++;
  120. break;
  121. case "RED":
  122. red++;
  123. break;
  124. case "YELLOW":
  125. yellow++;
  126. break;
  127. case "BLUE":
  128. blue++;
  129. break;
  130. default:
  131. break;
  132. }
  133. });
  134. }