// Copyright 2010 The Apache Software Foundation
//
// Licensed 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.

package org.apache.tapestry5.internal.services;

import org.apache.tapestry5.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.Test;

public class PartialDocumentLinkerImplTest extends Assert
{
    @Test
    public void script_link_uniqueness()
    {
        PartialMarkupDocumentLinker linker = new PartialMarkupDocumentLinker();

        linker.addScriptLink("foo.js");
        linker.addScriptLink("bar.js");
        linker.addScriptLink("foo.js");

        JSONObject reply = new JSONObject();

        linker.commit(reply);

        assertEquals(reply.toString(), "{\"scripts\":[\"foo.js\",\"bar.js\"]}");
    }

    @Test
    public void stylesheet_link_uniqueness()
    {
        PartialMarkupDocumentLinker linker = new PartialMarkupDocumentLinker();

        linker.addStylesheetLink("foo.css", null);
        linker.addStylesheetLink("bar.css", "print");
        linker.addStylesheetLink("bar.css", "screen");
        linker.addStylesheetLink("foo.css", null);

        JSONObject reply = new JSONObject();

        linker.commit(reply);

        assertEquals(reply.toString(),
                "{\"stylesheets\":[{\"href\":\"foo.css\"},{\"media\":\"print\",\"href\":\"bar.css\"}]}");

    }
}

@@ -646,16 +646,60 @@
 vices;%0A%0A
+import org.apache.tapestry5.json.JSONArray;%0A
 import o
@@ -1725,93 +1725,215 @@
     
-assertEquals(reply.toString(),%0A                %22%7B%5C%22stylesheets%5C%22:%5B%7B%5C
+// JDK version affect this (order of attributes), so it's the hard way.%0A%0A        JSONObject expected = new JSONObject().put(%22stylesheets%22, new JSONArray(new JSONObject()%0A                .put(
 %22href
-%5C%22:%5C
+%22, 
 %22foo.css
 %5C%22%7D,
@@ -1932,60 +1932,132 @@
 .css
-%5C%22%7D,%7B%5C
+%22), new JSONObject().put(
 %22media
-%5C%22:%5C
+%22, 
 %22print
-%5C%22,%5C%22href%5C%22:%5C%22bar.css%5C%22%7D%5D%7D%22);%0A
+%22).put(%22href%22,%0A                %22bar.css%22)));%0A%0A        assertEquals(reply, expected);
 %0A   

Correct TAP5-765 test to not be platform sensitive (ordering of keys in a map broke the test on the CI server)