JsAccount Usage and Architecture

## Overview of Testing Objects

This directory contains sample JS components to test the basic JsAccount concepts, which can also serve as templates for new implementations.

### Component Naming

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.
Names are constructed with the following subparts:
(Ja)(AccountType)(Language)(ComponentType)(Role)

#### Common parts of names

- Ja: All objects or classes begin with Ja
- AccountType: the type of account being created (here Foo), or Base 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.
- Language: Use Cpp with objects and classes implemented using C++, leave blank for JS versions.
- ComponentType: the standard MailNews term for objects that implement a particular interface. The legacy .cpp base components are typically named:
  (nsMsg)(ComponentType).cpp
  for example nsMsgIncomingServer.cpp. This may be shortened where appropriate, for example we use Url instead of MailNewsUrl as the Ja prefix implies that this is an implementation of MailNews objects.
- Role: the function of the object within the JA architecture.

- Constructor: Creates the object only.
- Delegator: Calls the appropriate object, either a JS or C++ variant, that implements a particular XPCOM method.
- Properties: 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.
- (blank): Actual implementation.

Example: The C++ class that delegates the implementation of nsIMsgMailNewsUrl (abbreviated as Url) to either a C++ or JS method is called JaCppUrlDelegator.