From 2c426c78c6626216b37506cbd116a1f18aaeb361 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 16 May 2026 07:23:03 +0200 Subject: [PATCH] Added tests back --- mist-test/src/app.mist | 95 +++++++++++++++++++++++++++++++++++++++ mist-test/src/event.mist | 7 +++ mist-test/src/logger.mist | 72 +++++++++++++++++++++++++++++ mist-test/src/plugin.mist | 16 +++++++ mist-test/src/task.mist | 20 +++++++++ 5 files changed, 210 insertions(+) create mode 100644 mist-test/src/app.mist create mode 100644 mist-test/src/event.mist create mode 100644 mist-test/src/logger.mist create mode 100644 mist-test/src/plugin.mist create mode 100644 mist-test/src/task.mist diff --git a/mist-test/src/app.mist b/mist-test/src/app.mist new file mode 100644 index 0000000..01fbd87 --- /dev/null +++ b/mist-test/src/app.mist @@ -0,0 +1,95 @@ +use ; +use ; +use ; + +pub class Application { + String name; + + Vec tasks; + Vec plugins; + + logger::Logger logger; + + bool running; + i32 ticks; + + pub constructor(str* name) { + self.name = name.to_string(); + + self.tasks = new Vec(); + self.plugins = new Vec(); + + self.logger = new logger::Logger("app"); + + self.running = false; + self.ticks = 0; + } + + pub void boot(self mut*) { + self.logger.info("booting application"); + + self.running = true; + + self.emit(event::Event::Startup); + } + + pub void run(self mut*) { + while(self.running) { + self.tick(); + + if(self.ticks >= 5) { + self.shutdown(); + } + } + } + + void tick(self mut*) { + self.logger.info("tick"); + + self.ticks = self.ticks + 1; + + var task = task::create_task("background-job"); + + self.tasks.push(task); + + println!("tasks: {}", self.tasks.len()); + } + + pub void shutdown(self mut*) { + self.emit(event::Event::Shutdown); + + self.logger.warning("shutdown"); + + self.running = false; + } + + pub void register_plugin(self mut*, String name) { + self.plugins.push(name.clone()); + + self.emit(event::Event::PluginLoaded(name)); + } + + void emit(self*, event::Event event) { + match(event) { + event::Event::Startup => { + self.logger.info("startup event"); + } + + event::Event::Shutdown => { + self.logger.info("shutdown event"); + } + + event::Event::PluginLoaded(name) => { + println!("plugin loaded: {}", name); + } + + event::Event::TaskExecuted(name) => { + println!("task executed: {}", name); + } + + event::Event::Error(message) => { + self.logger.error(&message); + } + } + } +} \ No newline at end of file diff --git a/mist-test/src/event.mist b/mist-test/src/event.mist new file mode 100644 index 0000000..6340bf4 --- /dev/null +++ b/mist-test/src/event.mist @@ -0,0 +1,7 @@ +pub enum Event { + Startup, + Shutdown, + TaskExecuted(String), + PluginLoaded(String), + Error(String), +} \ No newline at end of file diff --git a/mist-test/src/logger.mist b/mist-test/src/logger.mist new file mode 100644 index 0000000..7854ab9 --- /dev/null +++ b/mist-test/src/logger.mist @@ -0,0 +1,72 @@ +use ; +use ; + +pub trait TestLogging: fmt::Display { + String get(); +} + +pub enum LogLevel { + Info, + Warning, + Error, +} + +impl fmt::Display for LogLevel { + fmt::Result fmt(self*, Formatter<'_> mut* f) { + match (self) { + LogLevel::Info => { + return write!(f, "[INFO]"); + } + + LogLevel::Warning => { + return write!(f, "[WARN]"); + } + + LogLevel::Error => { + return write!(f, "[ERROR]"); + } + } + } +} + +pub class Logger { + String prefix; + + pub constructor(str* prefix) { + self.prefix = prefix.to_string(); + } + + pub void info(self*, str* message) { + self.log(LogLevel::Info, message); + } + + pub void warning(self*, str* message) { + self.log(LogLevel::Warning, message); + } + + pub void error(self*, str* message) { + self.log(LogLevel::Error, message); + } + + void log(self*, LogLevel level, str* message) { + match(level) { + LogLevel::Info => { + println!("{level} {} {}", self.prefix, message); + } + + LogLevel::Warning => { + println!("{level} {} {}", self.prefix, message); + } + + LogLevel::Error => { + println!("{level} {} {}", self.prefix, message); + } + } + } + + impl fmt::Display { + fmt::Result fmt(self*, Formatter<'_> mut* f) { + return write!(f, "logger ({})", self.prefix); + } + } +} \ No newline at end of file diff --git a/mist-test/src/plugin.mist b/mist-test/src/plugin.mist new file mode 100644 index 0000000..a3d16ba --- /dev/null +++ b/mist-test/src/plugin.mist @@ -0,0 +1,16 @@ +pub struct PluginInfo { + pub String name, + pub String version, +} + +pub class PluginRegistry { + T plugins; + + pub constructor(T plugins) { + self.plugins = plugins; + } + + pub T plugins(self) { + return self.plugins; + } +} \ No newline at end of file diff --git a/mist-test/src/task.mist b/mist-test/src/task.mist new file mode 100644 index 0000000..d902258 --- /dev/null +++ b/mist-test/src/task.mist @@ -0,0 +1,20 @@ +pub enum TaskState { + Pending, + Running, + Finished, + Failed, +} + +pub struct Task { + pub String name, + pub TaskState state, + pub i32 executions, +} + +pub Task create_task(str* name) { + return Task { + name: name.to_string(), + state: TaskState::Pending, + executions: 0, + }; +} \ No newline at end of file