summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/jsaccount/test/unit/resources/readme.html
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/jsaccount/test/unit/resources/readme.html')
-rw-r--r--comm/mailnews/jsaccount/test/unit/resources/readme.html62
1 files changed, 62 insertions, 0 deletions
diff --git a/comm/mailnews/jsaccount/test/unit/resources/readme.html b/comm/mailnews/jsaccount/test/unit/resources/readme.html
new file mode 100644
index 0000000000..e5490e7d41
--- /dev/null
+++ b/comm/mailnews/jsaccount/test/unit/resources/readme.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>JsAccount Usage and Architecture</title>
+ </head>
+ <body>
+ <h2>Overview of Testing Objects </h2>
+ This directory contains sample JS components to test the basic JsAccount
+ concepts, which can also serve as templates for new implementations.<br>
+ <h3>Component Naming</h3>
+ Because there are many different components involved with different roles,
+ it will be helpful to keep things straight by using a specific naming
+ convention for objects.
+ For testing, we consider that we are creating a new account type "foo". For
+ the specific case of the JA implementation of an object that implements the
+ nsIMsgMailNewsUrl interface, we'll use the following naming convention.
+ Typically C++ classes and JS constructors are capitalized, class instances
+ are not.<br>
+ <br>
+ Names are constructed with the following subparts:<br>
+ <br>
+ (<strong>Ja)</strong>(<strong>AccountType</strong>)(<strong>Language</strong>)(<strong>ComponentType</strong>)(<strong>Role</strong>)
+ <br>
+ <h4>Common parts of names</h4>
+ <ul>
+ <li><strong>Ja</strong>: All objects or classes begin with Ja</li>
+ <li><strong>AccountType</strong>: the type of account being created (here
+ <strong>Foo</strong>), or <strong>Base</strong> for the generic
+ implementation that is the base class of all types. May be *blank* if
+ the object is used for both base types and specific types.</li>
+ <li>
+ <strong>Language</strong>: Use <strong>Cpp</strong> with objects and
+ classes implemented using C++, leave blank for JS versions.
+ </li>
+ <li>
+ <strong>ComponentType</strong>: the standard MailNews term for objects
+ that implement a particular interface. The legacy .cpp base components
+ are typically named:<br>
+ <strong>(nsMsg)(ComponentType</strong>).cpp<br>
+ for example <strong>nsMsgIncomingServer</strong>.cpp. This may be
+ shortened where appropriate, for example we use <strong>Url</strong>
+ instead of <strong>MailNewsUrl</strong> as the <strong>Ja</strong>
+ prefix implies that this is an implementation of MailNews objects.</li>
+ <li><strong>Role</strong>: the function of the object within the JA
+ architecture.</li>
+ <ul>
+ <li><strong>Constructor</strong>: Creates the object only. </li>
+ <li><strong>Delegator</strong>: Calls the appropriate object, either a
+ JS or C++ variant, that implements a particular XPCOM method.
+ </li>
+ <li> <strong>Properties</strong>: JavaScript object that establishes
+ properties of a JA implementation class. This is used for automatic
+ generation of a list of methods to delegate to the JavaScript classes.</li>
+ <li>(blank): Actual implementation.</li>
+ </ul>
+ </ul>
+ Example: The C++ class that delegates the implementation of
+ nsIMsgMailNewsUrl (abbreviated as Url) to either a C++ or JS method is
+ called <strong>JaCppUrlDelegator</strong>.
+ </body>
+</html>