gadget.Prefs()

現状6つのPriority0(必須)のテストケースが落ちる。そのうち5つは gadget.Prefs 関係なので Shindig を調べてみた。


落ちるテストケースはこれ。

var prefs = new gadgets.Prefs();
PrefsSuite.verifyPref(result, prefs);
PrefsSuite.verifyValue(result, 'getInt(myCounter)',
prefs.getInt('myCounter'), 100); 

myCounter というユーザー設定がとれていない。

Shindigのfeatures/core/prefs.js を見てみると、

gadgets.Prefs = function() {
  if (!instance) {
    parseUrl();
    mergeDefaults();
    instance = this;
  }
  return instance;
};

ということでURLがあやしい。

function parseUrl() {
  var params = gadgets.util.getUrlParameters();
  for (var i in params) {
    if (params.hasOwnProperty(i)) {
      if (i.indexOf("up_") === 0 && i.length > 3) {
        prefs[i.substr(3)] = String(params[i]);
      } else if (i === "country") {
        country = params[i];
      } else if (i === "lang") {
        language = params[i];
      } else if (i === "mid") {
        moduleId = params[i];
      }
    }
  }
}

おk。ということでガジェットを構成するときに、up_myCounter=100 をクエリにくっつけてあげたらpassした。そんな感じのもので5個Failケースを蹴散らしたので残りは1つ。

ひとまず、ガジェットを構成するページには prefs.foo = bar で保存しておいて、URL構成するときに up_foo=bar をつければいいか。

{
  gagets: {
    top: [...],
    bottom: [...],
    center: [
      {
         url : "http://..../gadget.xml",
         prefs : {
            foo: "bar"
         }
      },
    ]
  }
}

追記。以下のテストデータが必要のようです。

>|javascript|
         "prefs" : {
           /* Spec test suite these User Preferencs */
           "myCounter" : 100,  /* PREF010 */
           "size"      : 2,    /* PREF011 */
           "myFloat"   : 3.43, /* PREF020 */
           "myString"  : "This is my string.", /* PREF030 */
           "myBool"    : true,       /* PREF040 */
           "myTestArray" : ["zdnet", "pc", "Apple Insider"] /* PREF050 */
         }