<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<Module>
  <ModulePrefs title="EndToEndTest">
    <Require feature="views" />
    <Require feature="opensocial" views="blank"/>
    <Require feature="osapi">
      <Param name="paramName">BAD_VALUE</Param>
    </Require>
    <Require feature="osapi" views="default">
      <Param name="paramName">GOOD_VALUE</Param>
    </Require>
    <Optional feature="content-rewrite">
      <Param name="exclude-urls">.*</Param>
    </Optional>
    <Locale messages="messages.xml"/>
    <!-- This bundle should be the one used in substituting messages in the default view -->
    <Locale messages="viewMessages.xml" views="default"/>
  </ModulePrefs>
  <Content type="html">
    <![CDATA[
    
      <span id="substituteHere">__MSG_TEST__</span>
          
      <script type="text/javascript" src="/testframework.js"></script>
      <script type="text/javascript">

        var tests = {
           viewFeaturesTest: function() {
              var params = gadgets.util.getFeatureParameters('osapi');
              var expected = "GOOD_VALUE";
              assertTrue('Should be GOOD_VALUE', expected == params["paramName"]);
              assertTrue('Missing content-rewrite feature', gadgets.util.hasFeature("content-rewrite"));
              assertTrue('Should not have opensocial loaded', !gadgets.util.hasFeature("opensocial"));
              finished();
           },
            
           viewLocalesTest: function(){
              var span = document.getElementById('substituteHere');
              var expected = "test view FTW";
              assertTrue('Wrong text substituted', expected == span.firstChild.data);
              finished();
           }
        }
      </script>
    ]]>
  </Content>
  <Content type="html" view="blank">
    <![CDATA[
      <h1>Blank</h1>
    ]]>
  </Content>
</Module>
