diff --git a/example.jl b/example.jl index bd8e3c5..660a7e3 100644 --- a/example.jl +++ b/example.jl @@ -265,6 +265,11 @@ if !ismissing(responce_1) && responce_1 == 42 PlutoTeachingTools.confetti() end +# ╔═╡ 957ec770-ab5b-4b0b-a38d-46834d96fb68 +expected_failure() do + error("This is an error message") +end + # ╔═╡ 7596325b-7a1b-4fad-bac3-ae6743e3f8dd md"""# Robust Local Resources""" diff --git a/src/PlutoTeachingTools.jl b/src/PlutoTeachingTools.jl index 662927d..735f256 100644 --- a/src/PlutoTeachingTools.jl +++ b/src/PlutoTeachingTools.jl @@ -48,6 +48,7 @@ export RobustLocalResource include("other.jl") export WidthOverDocs export confetti +export expected_failure include("footnotes.jl") export FootnotesInlineNumbered diff --git a/src/i18n/chinese.jl b/src/i18n/chinese.jl index 2a440de..42500ad 100644 --- a/src/i18n/chinese.jl +++ b/src/i18n/chinese.jl @@ -84,6 +84,9 @@ PlutoTeachingTools.check_type_eq_correct_str(sym, lang::Chinese) = md"$sym 类 # other.jl PlutoTeachingTools.full_width_mode_str(lang::Chinese) = "全屏模式" +PlutoTeachingTools.expected_failure_str(lang::Chinese) = "预期失败" +PlutoTeachingTools.expected_failure_text_str(lang::Chinese) = "代码预期会失败,但实际上成功执行了。" +PlutoTeachingTools.expected_error_message_str(lang::Chinese) = "预期错误信息" # present.jl PlutoTeachingTools.present_str(lang::Chinese) = "演示" diff --git a/src/i18n/english.jl b/src/i18n/english.jl index 9ffd4c2..016f878 100644 --- a/src/i18n/english.jl +++ b/src/i18n/english.jl @@ -105,6 +105,9 @@ end # other.jl PlutoTeachingTools.full_width_mode_str(lang::English) = "Full Width Mode" +PlutoTeachingTools.expected_failure_str(lang::English) = "Expected failure" +PlutoTeachingTools.expected_failure_text_str(lang::English) = "The code was expected to fail, but it evaluated successfully." +PlutoTeachingTools.expected_error_message_str(lang::English) = "Expected error message" # present.jl PlutoTeachingTools.present_str(lang::English) = "present" diff --git a/src/i18n/french.jl b/src/i18n/french.jl index fa4a4bb..bb2a900 100644 --- a/src/i18n/french.jl +++ b/src/i18n/french.jl @@ -163,6 +163,9 @@ end # other.jl PlutoTeachingTools.full_width_mode_str(lang::Lang) where {Lang<:French} = "Mode Pleine Largeur" +PlutoTeachingTools.expected_failure_str(lang::Lang) where {Lang<:French} = "Échec attendu" +PlutoTeachingTools.expected_failure_text_str(lang::Lang) where {Lang<:French} = "Le code était censé échouer, mais il a été évalué avec succès." +PlutoTeachingTools.expected_error_message_str(lang::Lang) where {Lang<:French} = "Message d'erreur attendu" # present.jl PlutoTeachingTools.present_str(lang::Lang) where {Lang<:French} = "présentation" diff --git a/src/i18n/german.jl b/src/i18n/german.jl index c6eb2f8..5e1c8b7 100644 --- a/src/i18n/german.jl +++ b/src/i18n/german.jl @@ -144,6 +144,9 @@ end function PlutoTeachingTools.full_width_mode_str(lang::German) return "Modus \"Volle Breite\"" end +PlutoTeachingTools.expected_failure_str(lang::German) = "Erwarteter Fehler" +PlutoTeachingTools.expected_failure_text_str(lang::German) = "Der Code sollte fehlschlagen, wurde aber erfolgreich ausgeführt." +PlutoTeachingTools.expected_error_message_str(lang::German) = "Erwartete Fehlermeldung" # present.jl PlutoTeachingTools.present_str(lang::German) = "präsentieren" diff --git a/src/i18n/i18n.jl b/src/i18n/i18n.jl index 687afcb..1ca149d 100644 --- a/src/i18n/i18n.jl +++ b/src/i18n/i18n.jl @@ -72,6 +72,9 @@ end # other.jl full_width_mode_str(lang::AbstractLanguage) = @error "Please define a translation." +expected_failure_str(lang::AbstractLanguage) = @error "Please define a translation." +expected_failure_text_str(lang::AbstractLanguage) = @error "Please define a translation." +expected_error_message_str(lang::AbstractLanguage) = @error "Please define a translation." # present.jl present_str(lang::AbstractLanguage) = @error "Please define a translation." diff --git a/src/i18n/russian.jl b/src/i18n/russian.jl index 730110f..c279a0c 100644 --- a/src/i18n/russian.jl +++ b/src/i18n/russian.jl @@ -117,6 +117,9 @@ end function PlutoTeachingTools.full_width_mode_str(lang::Russian) return "Режим полной ширины" end +PlutoTeachingTools.expected_failure_str(lang::Russian) = "Ожидаемая ошибка" +PlutoTeachingTools.expected_failure_text_str(lang::Russian) = "Ожидалось, что код завершится с ошибкой, но он выполнился успешно." +PlutoTeachingTools.expected_error_message_str(lang::Russian) = "Ожидаемое сообщение об ошибке" # present.jl PlutoTeachingTools.present_str(lang::Russian) = "презентация" diff --git a/src/i18n/spanish.jl b/src/i18n/spanish.jl index 5794619..217d720 100644 --- a/src/i18n/spanish.jl +++ b/src/i18n/spanish.jl @@ -158,6 +158,9 @@ end function PlutoTeachingTools.full_width_mode_str(lang::Spanish) return "Modo Pantalla Completa" end +PlutoTeachingTools.expected_failure_str(lang::Spanish) = "Fallo esperado" +PlutoTeachingTools.expected_failure_text_str(lang::Spanish) = "Se esperaba que el código fallara, pero se ejecutó correctamente." +PlutoTeachingTools.expected_error_message_str(lang::Spanish) = "Mensaje de error esperado" # present.jl PlutoTeachingTools.present_str(lang::Spanish) = "presentación" diff --git a/src/other.jl b/src/other.jl index 9ba6b1d..79c13a3 100644 --- a/src/other.jl +++ b/src/other.jl @@ -94,3 +94,40 @@ function confetti() """) end + +""" + expected_failure(f) + +Run the function `f`, and if it throws an error, displays just the error message similar +to how Pluto renders errors. If it does not throw an error, display a warning in a yellow box. + +```julia +expected_failure() do + error("This is an error message") +end +``` +""" +function expected_failure(f; lang::AbstractLanguage=default_language[]) + try + f() + MD(Admonition("warning", expected_failure_str(lang), [ + text_to_content(expected_failure_text_str(lang)) + ])) + catch e + str = sprint() do io + showerror(IOContext(io, :color=>true), e) + end + @htl """ +
+ +
+ $(expected_error_message_str(lang)) +
+
+ $(Main.PlutoRunner.embed_display(Text(str))) +
+
+
+ """ + end +end