summaryrefslogtreecommitdiffstats
path: root/devtools/client/webide/test/test_manifestUpdate.html
blob: 66f9affd026d3a974538e0ebb6c69e4ad0b89bbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE html>

<html>

  <head>
    <meta charset="utf8">
    <title></title>

    <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
    <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
    <script type="application/javascript;version=1.8" src="head.js"></script>
    <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
  </head>

  <body>

    <script type="application/javascript;version=1.8">
      window.onload = function() {
        SimpleTest.waitForExplicitFinish();

        let {TextDecoder, OS}  = Cu.import("resource://gre/modules/osfile.jsm", {});

        Task.spawn(function* () {
            let win = yield openWebIDE();
            let winProject = getProjectWindow(win);
            let AppManager = win.AppManager;

            function isProjectMarkedAsValid() {
              let details = win.frames[1];
              return !details.document.body.classList.contains("error");
            }

            let packagedAppLocation = getTestFilePath("app");

            let onValidated = waitForUpdate(win, "project-validated");
            let onDetails = waitForUpdate(win, "details");
            yield winProject.projectList.importPackagedApp(packagedAppLocation);
            yield onValidated;
            yield onDetails;

            let project = win.AppManager.selectedProject;

            ok("name" in project.manifest, "manifest includes name");
            is(project.name, project.manifest.name, "Display name uses manifest name");
            ok(isProjectMarkedAsValid(), "project is marked as valid");

            // Change the name
            let originalName = project.manifest.name;

            project.manifest.name = "xxx";

            // Write to disk
            yield AppManager.writeManifest(project);

            // Read file
            let manifestPath = OS.Path.join(packagedAppLocation, "manifest.webapp");
            let Decoder = new TextDecoder();
            let data = yield OS.File.read(manifestPath);
            data = new TextDecoder().decode(data);
            let json = JSON.parse(data);
            is(json.name, "xxx", "manifest written on disc");

            // Make the manifest invalid on disk
            delete json.name;
            let Encoder = new TextEncoder();
            data = Encoder.encode(JSON.stringify(json));
            yield OS.File.writeAtomic(manifestPath, data , {tmpPath: manifestPath + ".tmp"});

            // Trigger validation
            yield AppManager.validateAndUpdateProject(AppManager.selectedProject);
            yield nextTick();

            ok(!("name" in project.manifest), "manifest has been updated");
            is(project.name, "--", "Placeholder is used for display name");
            ok(!isProjectMarkedAsValid(), "project is marked as invalid");

            // Make the manifest valid on disk
            project.manifest.name = originalName;
            yield AppManager.writeManifest(project);

            // Trigger validation
            yield AppManager.validateAndUpdateProject(AppManager.selectedProject);
            yield nextTick();

            ok("name" in project.manifest, "manifest includes name");
            is(project.name, originalName, "Display name uses original manifest name");
            ok(isProjectMarkedAsValid(), "project is marked as valid");

            yield closeWebIDE(win);

            yield removeAllProjects();

            SimpleTest.finish();
        });
      }
    </script>
  </body>
</html>