From 5f406a081a3760dafb868a50340c360b56e82ff9 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Wed, 16 Dec 2020 19:33:31 +0100 Subject: [PATCH] Added function to save and load a save game. --- src/game/SaveGame.test.ts | 32 ++++++++++++++++++++++++++++++++ src/game/SaveGame.ts | 20 ++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/game/SaveGame.test.ts create mode 100644 src/game/SaveGame.ts diff --git a/src/game/SaveGame.test.ts b/src/game/SaveGame.test.ts new file mode 100644 index 0000000..5acc179 --- /dev/null +++ b/src/game/SaveGame.test.ts @@ -0,0 +1,32 @@ +import "jest" +import { saveGameKey, saveGame, loadGame } from './SaveGame'; + +describe("SaveGame", () => { + const state = { + Level: 42, + Score: 89, + }; + + beforeEach(() => { + localStorage.clear(); + }); + + test("save game", () => { + saveGame(state); + const inStore = localStorage.getItem(saveGameKey); + expect(inStore).not.toBeNull(); + const loaded = JSON.parse(inStore as string); + expect(loaded).toEqual(state); + }); + + test("save game not exists", () => { + const loaded = loadGame(); + expect(loaded).toBeNull(); + }); + + test("load game", () => { + saveGame(state); + const loaded = loadGame(); + expect(loaded).toEqual(state); + }); +}); diff --git a/src/game/SaveGame.ts b/src/game/SaveGame.ts new file mode 100644 index 0000000..bbab9ac --- /dev/null +++ b/src/game/SaveGame.ts @@ -0,0 +1,20 @@ +export const saveGameKey = "save_game"; + +export interface SaveGame { + Level: number + Score: number +} + +export function saveGame(saveGame: SaveGame) { + localStorage.setItem(saveGameKey, JSON.stringify(saveGame)); +} + +export function loadGame(): SaveGame | null { + const saveGame = localStorage.getItem(saveGameKey); + + if(saveGame) { + return JSON.parse(saveGame); + } + + return null; +}