summaryrefslogtreecommitdiffstats
path: root/layout/mathml/tests/test_bug827713-2.html
blob: 8143bc0493dfdec5c31291c099e6ea43d3e0859d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE HTML>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=553917
-->
<html>
  <head>
    <title>Test for error handling aspect of Bug 827713</title>
    <script src="/tests/SimpleTest/SimpleTest.js"></script>
    <script src="/tests/SimpleTest/EventUtils.js"></script>
    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    <script type="application/javascript">

      var stringBundleService = 
        SpecialPowers.Cc["@mozilla.org/intl/stringbundle;1"]
                    .getService(SpecialPowers.Ci.nsIStringBundleService);
      var g_bundl =
        stringBundleService.createBundle("chrome://global/locale/mathml/mathml.properties");
      
      var g_errorInfo = {
        InvalidChild: {
          status : [false, false, false],
          args : [["mprescripts", "msubsup"], ["mprescripts", "msubsup"],
                 ["mprescripts", "msub"]]
        },

        MMultiscriptsErrors: {
          status: [false, false],
          args: ["NoBase", "SubSupMismatch"]
        }
    };
      
      var g_errorTypes = ["InvalidChild", "MMultiscriptsErrors"];
      
      function getErrorMessage(name,idx)
      {
        if (name != "MMultiscriptsErrors") {
          return g_bundl.formatStringFromName(name,g_errorInfo[name].args[idx]);
        }
        return g_bundl.GetStringFromName(g_errorInfo[name].args[idx]);
      }
    
    /** Checks the roll call to see if all expected error messages were present. */
    function processRollCall()
    {
      for (var i=0; i<g_errorTypes.length;i++) {
        for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
          ok(g_errorInfo[g_errorTypes[i]].status[j],
             "\"" + getErrorMessage(g_errorTypes[i], j)
                  + "\" was expected to be in the error console.");
        }
      }
    }
    
    /** Tests a candidate to see if it is one of the expected messages and updates the 
        g_errorInfo structure if it is. */
    function doRollCall(msg)
    {
      for (var i = 0; i < g_errorTypes.length; i++) {
        for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
          if (msg == getErrorMessage(g_errorTypes[i], j))
          {
            g_errorInfo[g_errorTypes[i]].status[j] = true;
          }
        }
      }
    }
    
    SpecialPowers.registerConsoleListener(
      function (msg) {
        if (msg.message == "SENTINEL") {
          processRollCall();
          SimpleTest.finish();
        } else if (msg.isScriptError) {
          doRollCall(msg.errorMessage);
        }
      });
      
    SimpleTest.waitForExplicitFinish();
  </script>
  </head>
  <body onload="SpecialPowers.postConsoleSentinel();">
    <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=827713">Mozilla Bug 827713</a>
    
    <!-- InvalidChild -->
    <math>
      <msubsup>
        <mprescripts/>
      </msubsup>
    </math>

    <math>
      <msubsup>
        <mprescripts/>
        <mprescripts/>
      </msubsup>
    </math>

    <math>
      <msub>
        <mtext>a</mtext>
        <mprescripts/>
        <mtext>a</mtext>
        <mprescripts/>
      </msub>
    </math>

    <!-- NoBase -->
    <math>
      <mmultiscripts>
      </mmultiscripts>
    </math>

    <!-- SubSupMismatch -->
    <math>
      <mmultiscripts>
        <mtext>b</mtext>
        <mtext>c</mtext>
        <mprescripts/>
        <mtext>a</mtext>
      </mmultiscripts>
    </math>
  </body>
</html>