blob: 54d903c77928ddf4ac2269627f60e2ebdba1a56d [file] [log] [blame]
<?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.
-->
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
applicationComplete="setupLC()"
enterFrame="updateStuff()" close="closeHandler(event)"
>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<!-- preloadSWF=/Users/aharui/CodeCoveragePreloadSWF.swf -->
<fx:Script>
<![CDATA[
import mx.controls.Alert;
private var lc:LocalConnection;
private var file:File;
private var fs:FileStream;
private var stringMap:Array = [];
private var lineMap:Array = [];
private var so:SharedObject;
private function setupLC():void
{
lc = new LocalConnection();
lc.client = this;
lc.allowDomain('*');
lc.connect("_CodeCoverageLC");
file = File.userDirectory;
file = file.resolvePath("codecoverage.txt");
fs = new FileStream();
fs.open(file, FileMode.APPEND);
so = SharedObject.getLocal("CodeCoverageServer");
if (so.data.mmcfg)
mmPath.text = so.data.mmcfg;
else
mmPath.text = File.userDirectory.nativePath + File.separator + "mm.cfg";
if (so.data.swfpath)
swfPath.text = so.data.swfpath;
else
swfPath.text = File.userDirectory.nativePath + File.separator + "CodeCoveragePreloadSWF.swf";
applyConfig();
}
private var mmFile:File;
private function search():void
{
mmFile = new File(File.userDirectory.nativePath);
mmFile.browseForOpen("Path to mm.cfg");
mmFile.addEventListener(Event.SELECT, selectHandler);
}
private function selectHandler(event:Event):void
{
mmPath.text = mmFile.nativePath;
}
private var swfFile:File;
private function searchSWF():void
{
swfFile = new File(File.userDirectory.nativePath);
swfFile.browseForOpen("Path to CodeCoveragePreloadSWF.swf");
swfFile.addEventListener(Event.SELECT, selectSWFHandler);
}
private function selectSWFHandler(event:Event):void
{
swfPath.text = swfFile.nativePath;
}
private function saveConfig():void
{
so.data.mmcfg = mmPath.text;
so.data.swfpath = swfPath.text;
applyConfig();
}
private const PRELOAD_SWF:String = "preloadSWF=";
private function applyConfig():void
{
if (mmPath.text.length == 0)
return;
if (!mmFile)
mmFile = new File();
mmFile.nativePath = mmPath.text;
if (!mmFile.exists)
{
Alert.show("mm.cfg not found", "Error");
return;
}
if (!swfFile)
swfFile = new File();
swfFile.nativePath = swfPath.text;
if (!swfFile.exists)
{
Alert.show("CodeCoveragePreloadSWF.swf not found", "Error");
return;
}
var fs:FileStream = new FileStream();
fs.open(mmFile, FileMode.UPDATE);
var text:String = fs.readUTFBytes(fs.bytesAvailable);
var lineSep:String = "\r\n";
if (text.indexOf(lineSep) == -1)
{
lineSep = "\r";
if (text.indexOf(lineSep) == -1)
{
lineSep = "\n";
}
}
var lines:Array = text.split(lineSep);
var n:int = lines.length;
for (var i:int = 0; i < n; i++)
{
if (lines[i].indexOf(PRELOAD_SWF) != -1)
{
lines.splice(i, 1);
i--;
n--
}
}
if (lines[n - 1].length == 0)
lines.pop();
lines.push(PRELOAD_SWF + swfFile.nativePath);
lines.push("");
text = lines.join(lineSep);
fs.position = 0;
fs.truncate();
fs.writeUTFBytes(text);
fs.close();
}
private var count:int = 0;
public function reset():void
{
if (stringMap.length > 0)
{
// codecoverpreloadswf is first one
var s:String = stringMap[0];
stringMap = [s];
lineMap = [{}];
}
else
{
stringMap = [];
lineMap = [{}];
}
}
public function newString(file_name:String):void
{
stringMap.push(file_name);
lineMap.push({});
//trace(file_name);
}
private var s:String = "";
public function debugline(string_ids:String, linenums:String):void
{
var ids:Array = string_ids.split(" ");
var lines:Array = linenums.split(" ");
var n:int = ids.length;
for (var i:int = 0; i < n; i++)
{
++count;
if (stringMap[ids[i]] == undefined)
s += ids[i] + ':' + rightJustify(lines[i]) + "\n";
else if (lineMap[ids[i]][lines[i]] == undefined)
{
lineMap[ids[i]][lines[i]] = 1;
s += '"' + stringMap[ids[i]] + '":' + rightJustify(lines[i]) + "\n";
}
}
}
private var padding:String = " ";
private function rightJustify(num:String):String
{
var i:int = 8 - num.length;
var pad:String = padding.substr(0, i);
return pad + num;
}
private function updateStuff():void
{
if (count > 0)
{
fs.writeUTFBytes(s);
s = "";
numlines.text = count.toString();
}
}
protected function closeHandler(event:Event):void
{
mmFile.nativePath = mmPath.text;
if (!mmFile.exists)
{
Alert.show("mm.cfg not found", "Error");
return;
}
swfFile.nativePath = swfPath.text;
if (!swfFile.exists)
{
Alert.show("CodeCoveragePreloadSWF.swf not found", "Error");
return;
}
var fs:FileStream = new FileStream();
fs.open(mmFile, FileMode.UPDATE);
var text:String = fs.readUTFBytes(fs.bytesAvailable);
var lineSep:String = "\r\n";
if (text.indexOf(lineSep) == -1)
{
lineSep = "\r";
if (text.indexOf(lineSep) == -1)
{
lineSep = "\n";
}
}
var lines:Array = text.split(lineSep);
var n:int = lines.length;
for (var i:int = 0; i < n; i++)
{
if (lines[i].indexOf(PRELOAD_SWF) != -1)
{
lines.splice(i, 1);
i--;
n--;
}
}
if (lines[n - 1].length > 0)
lines.push("");
text = lines.join(lineSep);
fs.position = 0;
fs.truncate();
fs.writeUTFBytes(text);
fs.close();
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout />
</s:layout>
<s:HGroup width="100%">
<s:Label text="Path to mm.cfg: " />
<s:TextInput id="mmPath" width="100%" />
<s:Button label="Search..." click="search()" />
</s:HGroup>
<s:HGroup width="100%">
<s:Label text="Path to CodeCoveragePreloadSWF.swf: " />
<s:TextInput id="swfPath" width="100%" />
<s:Button label="Search..." click="searchSWF()" />
</s:HGroup>
<s:Button label="Save Configuration" click="saveConfig()" />
<s:HGroup>
<s:Label text="Num Lines:" />
<s:Label id="numlines" />
</s:HGroup>
</s:WindowedApplication>