test_rendering.ml (2893B)
1 (* TODO: Add xss tests. *) 2 3 open Learning 4 5 let courses = Array.to_list (Render.get_course_array ()) 6 let expected_courses = [ "course_0"; "course_1" ] 7 let course_0_page_0 = Render.render_page "course_0" "0_example.sl" 8 let course_0_page_1 = Render.render_page "course_0" "1_example.sl" 9 let course_1_page_0 = Render.render_page "course_1" "0_example.sl" 10 let pages_in_order = Render.get_pages_in_order "course_0" 11 12 let contains s1 s2 = 13 let len1 = String.length s1 and len2 = String.length s2 in 14 let rec go idx = 15 if idx + len2 > len1 then false 16 else if String.sub s1 idx len2 = s2 then true 17 else go (idx + 1) 18 in 19 go 0 20 21 let test_rendering () = 22 (* Verify non-sl extension pages are hidden for course listings. *) 23 assert (List.length pages_in_order = 2); 24 25 (*Verify happy path course listing.*) 26 assert (courses = expected_courses); 27 assert (Render.render_page "course_0" "0_example.sl" != ""); 28 29 (* 30 Verify sensible expectations about each line. We assume the 31 mapping between sl headers and html headers, and then check 32 text existence. 33 *) 34 assert (contains course_0_page_0 "<h1>"); 35 assert (contains course_0_page_0 "<h2>"); 36 assert (contains course_0_page_0 "<h3>"); 37 assert (contains course_0_page_0 "This is an example sl file."); 38 39 (* 40 Verify the following don't render when mis-specified: 41 - # -> h1 42 - ## -> h2 43 - ### -> h3 44 - => -> href 45 - =>e -> iframe 46 - ``` -> results in subsequent preformatted lines 47 - ?? -> summary (used to hide / unhide in html) 48 - > -> blockquote 49 - * -> ul 50 *) 51 52 (* TODO: These are brittle; add classes for rendering / validation in templates. *) 53 assert (not (contains course_0_page_1 "<h1>TEST")); 54 assert (not (contains course_0_page_1 "<h2>TEST")); 55 assert (not (contains course_0_page_1 "<h3>TEST")); 56 assert (not (contains course_0_page_1 "href=\"TEST")); 57 assert (not (contains course_0_page_1 "iframe")); 58 assert (not (contains course_0_page_1 "<pre-formatted>TEST")); 59 assert (not (contains course_0_page_1 "summary")); 60 assert (not (contains course_0_page_1 "quote")); 61 assert (not (contains course_0_page_1 "<li>")); 62 63 (* 64 Test well-formed variant of above page renders each 65 line type as expected. 66 *) 67 assert (contains course_1_page_0 "<h1>TEST"); 68 assert (contains course_1_page_0 "<h2>TEST"); 69 assert (contains course_1_page_0 "<h3>TEST"); 70 assert (contains course_1_page_0 "href=\"TEST"); 71 assert (contains course_1_page_0 "iframe"); 72 assert (contains course_1_page_0 "<pre-formatted>TEST"); 73 assert (contains course_1_page_0 "summary"); 74 assert (contains course_1_page_0 "quote"); 75 assert (contains course_1_page_0 "<li>") 76 77 (* 78 type line_format = 79 | Normal 80 | HeaderL1 81 | HeaderL2 82 | HeaderL3 83 | Embedded 84 | Preformatted 85 | Hidden 86 | Quote 87 | Link 88 | ListItem 89 *)