Rally X
ELEN3009 Project by Justin Wernick and David Schneider
tests/presentationTests.cpp
Go to the documentation of this file.
00001 
00033 #include <utility>
00034 #include <list>
00035 using namespace std;
00036 
00037 #include <gtest/gtest.h>
00038 
00039 #include "../source/presentation/BitmapStore.h"
00040 #include "../source/presentation/ColourStore.h"
00041 #include "../source/presentation/GamePanel.h"
00042 #include "../source/presentation/Screen.h"
00043 
00044 #include "../source/logic/PlayerCar.h"
00045 #include "../source/logic/EnemyCar.h"
00046 #include "../source/logic/Checkpoint.h"
00047 #include "../source/logic/Rock.h"
00048 #include "../source/logic/Smokescreen.h"
00049 #include "../source/logic/Maze.h"
00050 #include "../source/logic/DestroyedObjectPopup.h"
00051 
00055 TEST(BitmapStore, returnsBitmapForAllImages)
00056 {
00057     BitmapStore testStore(50);
00058 
00059     ALLEGRO_BITMAP* testBitmap = NULL;
00060 
00061     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::PLAYER));
00062     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::ENEMY));
00063     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::CHECKPOINT));
00064     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::ROCK));
00065     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::MAZE_WALL));
00066     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::MAZE_FLOOR));
00067     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::SMOKE));
00068     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::CRASHED_CAR));
00069     EXPECT_NO_FATAL_FAILURE(testBitmap = testStore.getBitmap(BitmapStore::CLAIMED_CHECKPOINT));
00070 }
00071 
00075 TEST(ColourStore, returnsColourForAllImages)
00076 {
00077     ColourStore testStore;
00078 
00079     ALLEGRO_COLOR testColour;
00080 
00081     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::PLAYER));
00082     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::ENEMY));
00083     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::CHECKPOINT));
00084     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::ROCK));
00085     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::MAZE_WALL));
00086     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::MAZE_FLOOR));
00087     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::SMOKE));
00088     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::CRASHED_CAR));
00089     EXPECT_NO_FATAL_FAILURE(testColour = testStore.getColour(BitmapStore::CLAIMED_CHECKPOINT));
00090 }
00091 
00095 TEST(Screen, exceptionOnBadResolution)
00096 {
00097     //resolution should be unsupported on most displays
00098     int badWidth = 1000;
00099     int badHeight = 5;
00100 
00101     EXPECT_ANY_THROW(Screen(badWidth, badHeight, true));
00102 }
00106 TEST(Screen, noExceptionOnWindowed)
00107 {
00108     int badWidth = 1000;
00109     int badHeight = 5;
00110 
00111     EXPECT_NO_THROW(Screen(badWidth, badHeight, false));
00112 
00113 }
00117 TEST(Screen, noExceptionOnGoodResolution)
00118 {
00119     //resolution should be supported on most monitors
00120     int goodWidth = 800;
00121     int goodHeight = 600;
00122 
00123     EXPECT_NO_THROW(Screen(goodWidth, goodHeight, true));
00124 }
00125 
00129 TEST(ScreenPanel, drawingToCurrentBackBuffer)
00130 {
00131     al_init();
00132 
00133     ALLEGRO_BITMAP* testBitmapBack = al_create_bitmap(500,500);
00134     ALLEGRO_BITMAP* testBitmapFront = al_create_bitmap(500,500);
00135 
00136     ALLEGRO_COLOR blankColour = al_map_rgb(0,0,0);
00137     al_set_target_bitmap(testBitmapBack);
00138     al_clear_to_color(blankColour);
00139     al_set_target_bitmap(testBitmapFront);
00140     al_clear_to_color(blankColour);
00141 
00142     GamePanel testPanel(testBitmapBack, testBitmapFront, 0, 0, 500, 500);
00143     Maze testMaze;
00144 
00145     vector<pair<int,int> > wallsFull;
00146 
00147     for (int x=0; x<20; ++x)
00148     {
00149         for (int y=0; y<20; ++y)
00150         {
00151             wallsFull.push_back(make_pair(x,y));
00152         }
00153     }
00154     testMaze.generateMaze(wallsFull,20,20);
00155 
00156     list<PlayerCar> players;
00157     list<EnemyCar> enemies;
00158     list<Checkpoint> checkpoints;
00159     list<Rock> rocks;
00160     list<Smokescreen> smokescreens;
00161     list<DestroyedObjectPopup> popups;
00162 
00163     testPanel.draw(testMaze, players, enemies, checkpoints, rocks, smokescreens, popups);
00164 
00165     BitmapStore bitmapStore(50);
00166     ALLEGRO_BITMAP* wall = bitmapStore.getBitmap(BitmapStore::MAZE_WALL);
00167     ALLEGRO_COLOR mazeColour = al_get_pixel(wall, 25, 25);
00168 
00169     ALLEGRO_COLOR backSample = al_get_pixel(testBitmapBack, 250, 250);
00170     ALLEGRO_COLOR frontSample = al_get_pixel(testBitmapFront, 250, 250);
00171 
00172     EXPECT_FLOAT_EQ(mazeColour.r, backSample.r);
00173     EXPECT_FLOAT_EQ(mazeColour.g, backSample.g);
00174     EXPECT_FLOAT_EQ(mazeColour.b, backSample.b);
00175     EXPECT_FLOAT_EQ(mazeColour.a, backSample.a);
00176 
00177     EXPECT_FLOAT_EQ(blankColour.r, frontSample.r);
00178     EXPECT_FLOAT_EQ(blankColour.g, frontSample.g);
00179     EXPECT_FLOAT_EQ(blankColour.b, frontSample.b);
00180     EXPECT_FLOAT_EQ(blankColour.a, frontSample.a);
00181 
00182     al_destroy_bitmap(testBitmapBack);
00183     al_destroy_bitmap(testBitmapFront);
00184 }
00185 
00189 TEST(ScreenPanel, drawingToCurrentBackBufferAfterFlip)
00190 {
00191     al_init();
00192 
00193     al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); //removes dependency on display existing
00194 
00195     ALLEGRO_BITMAP* testBitmapBack = al_create_bitmap(500,500);
00196     ALLEGRO_BITMAP* testBitmapFront = al_create_bitmap(500,500);
00197 
00198     ALLEGRO_COLOR blankColour = al_map_rgb(0,0,0);
00199     al_set_target_bitmap(testBitmapBack);
00200     al_clear_to_color(blankColour);
00201     al_set_target_bitmap(testBitmapFront);
00202     al_clear_to_color(blankColour);
00203 
00204     GamePanel testPanel(testBitmapBack, testBitmapFront, 0, 0, 500, 500);
00205     Maze testMaze;
00206 
00207     vector<pair<int,int> > wallsFull;
00208 
00209     for (int x=0; x<20; ++x)
00210     {
00211         for (int y=0; y<20; ++y)
00212         {
00213             wallsFull.push_back(make_pair(x,y));
00214         }
00215     }
00216     testMaze.generateMaze(wallsFull,20,20);
00217 
00218     list<PlayerCar> players;
00219     list<EnemyCar> enemies;
00220     list<Checkpoint> checkpoints;
00221     list<Rock> rocks;
00222     list<Smokescreen> smokescreens;
00223     list<DestroyedObjectPopup> popups;
00224 
00225     testPanel.flip();
00226 
00227     testPanel.draw(testMaze, players, enemies, checkpoints, rocks, smokescreens, popups);
00228 
00229     BitmapStore bitmapStore(50);
00230     ALLEGRO_BITMAP* wall = bitmapStore.getBitmap(BitmapStore::MAZE_WALL);
00231     ALLEGRO_COLOR mazeColour = al_get_pixel(wall, 25, 25);
00232 
00233     ALLEGRO_COLOR backSample = al_get_pixel(testBitmapBack, 250, 250);
00234     ALLEGRO_COLOR frontSample = al_get_pixel(testBitmapFront, 250, 250);
00235 
00236     EXPECT_FLOAT_EQ(mazeColour.r, frontSample.r);
00237     EXPECT_FLOAT_EQ(mazeColour.g, frontSample.g);
00238     EXPECT_FLOAT_EQ(mazeColour.b, frontSample.b);
00239     EXPECT_FLOAT_EQ(mazeColour.a, frontSample.a);
00240 
00241     EXPECT_FLOAT_EQ(blankColour.r, backSample.r);
00242     EXPECT_FLOAT_EQ(blankColour.g, backSample.g);
00243     EXPECT_FLOAT_EQ(blankColour.b, backSample.b);
00244     EXPECT_FLOAT_EQ(blankColour.a, backSample.a);
00245 
00246     al_destroy_bitmap(testBitmapBack);
00247     al_destroy_bitmap(testBitmapFront);
00248 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator