simple-learning

Simple learning web program
git clone git://git.laack.co/simple-learning.git
Log | Files | Refs | README | LICENSE

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 *)