// static content differs
compile("<gxp:msg>",
"<gxp:ph name='x'/>foo<gxp:eph/>",
"<gxp:ph name='x'/>bar<gxp:eph/>",
"</gxp:msg>");
assertAlert(new InvalidMessageError(
pos(4, 1), "Conflicting declarations of X within message"));
assertNoUnexpectedAlerts();
// static the same
compile("<gxp:msg>",
"<gxp:ph name='x'/>foo<gxp:eph/>",
"<gxp:ph name='x'/>foo<gxp:eph/>",
"</gxp:msg>");
assertNoUnexpectedAlerts();
// dynamic content differs (even if they look the same, NativeExpressions
// potentially eveluate to different values, so are considered "different")
compile("<gxp:msg>",
"<gxp:ph name='x' example='5'/><gxp:eval expr='x.getY()'/><gxp:eph/>",
"<gxp:ph name='x' example='5'/><gxp:eval expr='x.getY()'/><gxp:eph/>",
"</gxp:msg>");
assertAlert(new InvalidMessageError(
pos(4, 1), "Conflicting declarations of X within message"));
assertNoUnexpectedAlerts();
// Simple evaluations of a single variable are OK.
compile("<gxp:msg>",