protected EnumMemberAttribute(string valueString, bool _isFragment, string description, string css, Mechanisms mechanism, bool isCollection = false, HtmlTagName tag = HtmlTagName.Any) { this._isFragment = _isFragment; this._value = valueString; this.description = description; this._css = css; this.mechanism = mechanism; this.isCollection = isCollection; this.tagName = tag; }
public static string CssSelectorOf(EnumTypeAttribute typeAttribute, EnumMemberAttribute memberAttribute, string memberValue) { HtmlTagName tagName = typeAttribute.TagName; string tagLocator = tagName.Value(); Mechanisms mechanism = typeAttribute.Mechanism; string mechanismFormat = typeAttribute.Mechanism.Value(); string css; switch (mechanism) { case Mechanisms.ByAttr: case Mechanisms.ByAttribute: { int index = memberValue.IndexOf(EnumValueSplitter); if (index == -1) //The Value of the Enum entry shall be treated as the attribute name { string withAttr = string.Format("[{0}]", memberValue); css = string.Format(tagLocator, string.Empty, withAttr); } else { string attrString = string.Format(mechanismFormat, memberValue.Substring(0, index), memberValue.Substring(index + 1)); css = string.Format(tagLocator, string.Empty, attrString); } break; } case Mechanisms.ByOrder: case Mechanisms.ByOrderLast: case Mechanisms.ByChild: case Mechanisms.ByChildLast: { string[] pair = memberValue.Split(EnumValueSplitter); string attrString = null; switch (pair.Count()) { case 2: attrString = string.Format(mechanismFormat, string.Empty, pair[1]).Trim(); css = string.Format(tagLocator, pair[0], attrString); break; case 1: attrString = string.Format(mechanismFormat, string.Empty, memberValue).TrimStart(); css = string.Format(tagLocator, string.Empty, attrString); break; default: throw new InvalidEnumArgumentException(mechanismFormat + " expects one item or two items seperated by '='."); } break; } case Mechanisms.ByText: case Mechanisms.ByTag: { //Notice: this is not preferrable with CSS Locator. //The value of the Enum member shall be used afterwards css = string.Format(tagLocator, string.Empty, string.Empty); break; } case Mechanisms.ByCustom: { css = memberValue; break; } case Mechanisms.ByAdjacent: case Mechanisms.ByAncestor: case Mechanisms.ByParent: case Mechanisms.BySibling: { string[] pair = memberValue.Split(EnumValueSplitter); string attrString = null; switch (pair.Count()) { case 2: attrString = string.Format(mechanismFormat, pair[0], string.Empty); css = string.Format(tagLocator, attrString, pair[1]); break; case 1: attrString = string.Format(mechanismFormat, memberValue, string.Empty); css = string.Format(tagLocator, attrString, string.Empty); break; default: throw new InvalidEnumArgumentException(mechanismFormat + " expects one item or two items seperated by '='."); } break; } default: //case Mechanisms.ById: //case Mechanisms.ByClass: //case Mechanisms.ByUrl: //case Mechanisms.ByName: //case Mechanisms.ByValue: { string[] pair = memberValue.Split(EnumValueSplitter); string byId = string.Format(mechanismFormat, pair.Last()); css = string.Format(tagLocator, string.Empty, byId); break; } } return(css); }