-- Automation 4 test file -- Test that appending lines to a file places the lines in the appropriate -- sections of the file, creating the sections if needed script_name = "TEST append lines" script_description = "Test that appended lines go to the right place" script_author = "Thomas Goyne" script_version = "1" function make_scriptinfo(key, value) return { class = "info", section = "[Script Info]", key = key, value = value } end function make_style(name) return { class = "style", section = "[V4+ Styles]", name = name, fontname = "Arial", fontsize = 20, color1 = "&H000000&", color2 = "&H000000&", color3 = "&H000000&", color4 = "&H000000&", bold = true, italic = false, underline = false, strikeout = false, scale_x = 100, scale_y = 100, spacing = 0, angle = 0, borderstyle = 0, outline = 0, shadow = 0, align = 5, margin_l = 0, margin_r = 0, margin_t = 0, margin_b = 0, encoding = 0 } end function make_dialogue(text) return { class = "dialogue", section = "[Events]", comment = false, layer = 0, start_time = 0, end_time = 2000, style = "Default", actor = "", margin_l = 0, margin_r = 0, margin_t = 0, margin_b = 0, effect = "", text = text } end function make_header(name) return { class = "head", section = name } end function make_format(fstr, section) return { class = "format", section = section, text = fstr } end function check_field(i, actual, expected, name) if actual ~= expected then error(i .. ": Expected '" .. expected .. "', got '" .. actual .. "' for " .. name) end end function check_line(i, line, class, section) check_field(i, line.class, class, "class") check_field(i, line.section, section, "section") end function test(subs) subs.deleterange(1, #subs) -- verify that everything works with the items added in order subs[0] = make_header("[Script Info]") subs[0] = make_scriptinfo("Title", "Default Aegisub file") subs[0] = make_scriptinfo("ScriptType", "v4.00+") subs[0] = make_scriptinfo("WrapStyle", "0"); subs[0] = make_scriptinfo("ScaledBorderAndShadow", "yes") subs[0] = make_scriptinfo("Collisions", "Normal") subs[0] = make_header("[V4+ Styles]") subs[0] = make_format("Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding", "[V4+ Styles]") subs[0] = make_style("Default") subs[0] = make_header("[Events]") subs[0] = make_format("Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text", "[Events]") subs[0] = make_dialogue("") check_line(1, subs[1], "head", "[Script Info]") check_line(2, subs[2], "info", "[Script Info]") check_line(3, subs[3], "info", "[Script Info]") check_line(4, subs[4], "info", "[Script Info]") check_line(5, subs[5], "info", "[Script Info]") check_line(6, subs[6], "info", "[Script Info]") check_line(7, subs[7], "head", "[V4+ Styles]") check_line(8, subs[8], "format", "[V4+ Styles]") check_line(9, subs[9], "style", "[V4+ Styles]") check_line(10, subs[10], "head", "[Events]") check_line(11, subs[11], "format", "[Events]") check_line(12, subs[12], "dialogue", "[Events]") subs.deleterange(1, #subs) -- test that groups appear in the order they're first used and lines are -- put in the right group subs[0] = make_scriptinfo("Title", "Script Title") subs[0] = make_style("Default") subs[0] = make_dialogue("Foo") subs[0] = make_style("Default 2") subs[0] = make_scriptinfo("ScriptType", "v4.00+") subs[0] = make_dialogue("Bar") check_line(1, subs[1], "head", "[Script Info]") check_line(2, subs[2], "info", "[Script Info]") check_line(3, subs[3], "info", "[Script Info]") check_line(4, subs[4], "head", "[V4+ Styles]") check_line(5, subs[5], "style", "[V4+ Styles]") check_line(6, subs[6], "style", "[V4+ Styles]") check_line(7, subs[7], "head", "[Events]") check_line(8, subs[8], "dialogue", "[Events]") check_line(9, subs[9], "dialogue", "[Events]") aegisub.set_undo_point("append test") end aegisub.register_macro(script_name, script_description, test)