25 de January de 2017 – 23:29
PR #45 on Protractor Flake added the ability to specify custom parsers. On my project we’re sharding (running multiple instances of) Protractor and using the following parser to re-run only the failing spec files.
You’ll want to replace the /test/functional/specs/
and the browser name (chrome
) below with your actual values.
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
| const _ = require('lodash');
// If only one spec file fails, on the next re-run, we don't get the filename on the output. So
// if it fails again, we need re-use the filename from the previous run
let previousSpecFileNames = [];
module.exports = {
parse: function (protractorTestOutput) {
if (previousSpecFileNames.length === 1) {
return previousSpecFileNames;
}
const lines = protractorTestOutput.split(`\n`);
// At the end of the output there's a summary of which shards failed
const failedLines = lines.filter(line =>
line.startsWith('[launcher] chrome')
&& line.includes('failed')
&& line.includes('test(s)'));
// regex matches #number and #number-number (ie #1 or #1-1, #1-2, #1-3...)
const testNumberRegExp = new RegExp(/#[0-9](-[0-9]+)?/);
const failedSpecsLines = failedLines.map(failedLine => {
const match = testNumberRegExp.exec(failedLine);
if (match) {
// Lines with "#number-number ]" (space followed by closing bracket) and "Specs: "
return lines.filter(line => line.includes(`${match[0]}] `) && line.includes('Specs: '));
}
return null;
}).reduce(function (a, b) { // Flatten the array
return a.concat(b);
}, []);
const specFileNames = _.compact(failedSpecsLines).map(line => {
const startingPathPosition = line.indexOf('/test/functional/specs/');
return line.substr(startingPathPosition + 1);
});
previousSpecFileNames = specFileNames;
return specFileNames;
},
name: 'Your custom parser name',
}; |
const _ = require('lodash');
// If only one spec file fails, on the next re-run, we don't get the filename on the output. So
// if it fails again, we need re-use the filename from the previous run
let previousSpecFileNames = [];
module.exports = {
parse: function (protractorTestOutput) {
if (previousSpecFileNames.length === 1) {
return previousSpecFileNames;
}
const lines = protractorTestOutput.split(`\n`);
// At the end of the output there's a summary of which shards failed
const failedLines = lines.filter(line =>
line.startsWith('[launcher] chrome')
&& line.includes('failed')
&& line.includes('test(s)'));
// regex matches #number and #number-number (ie #1 or #1-1, #1-2, #1-3...)
const testNumberRegExp = new RegExp(/#[0-9](-[0-9]+)?/);
const failedSpecsLines = failedLines.map(failedLine => {
const match = testNumberRegExp.exec(failedLine);
if (match) {
// Lines with "#number-number ]" (space followed by closing bracket) and "Specs: "
return lines.filter(line => line.includes(`${match[0]}] `) && line.includes('Specs: '));
}
return null;
}).reduce(function (a, b) { // Flatten the array
return a.concat(b);
}, []);
const specFileNames = _.compact(failedSpecsLines).map(line => {
const startingPathPosition = line.indexOf('/test/functional/specs/');
return line.substr(startingPathPosition + 1);
});
previousSpecFileNames = specFileNames;
return specFileNames;
},
name: 'Your custom parser name',
};
28 de January de 2014 – 15:43
Run this command on the terminal to remove every ._ file created by Mac OS X on the current path and its descendants:
find . -name '._*' -delete |
find . -name '._*' -delete
17 de December de 2013 – 15:24
I just spent 10 minutes perusing every Adium menu and options to find where I could disable the message “entered the room” and “left the room” on Adium. Turns out, it’s easy: Right click on the IRC channel name tab and the option “Show Join/Leave messages” will appear.
23 de September de 2013 – 21:04
So, I prefer spaces, and when I press tab, it should instead write 4 spaces. I forgot to set this option on Sublime Text and did some commits with tabs. The following git command will rewrite the repo history and replace tabs by 4 spaces.
git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | find . -exec perl -pi -e "s/\t/ /g" {} \;' HEAD |
git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | find . -exec perl -pi -e "s/\t/ /g" {} \;' HEAD
07 de May de 2013 – 15:00
Snippet to download a file using WinJS.xhr and save it. The file variable below is a StorageFile, result of pickSaveFileAsync.
Note the usage of responseType: “blob” as an option to xhr, and how it is copied to the file stream with msDetachStream.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| WinJS.xhr({
responseType: "blob",
type: "GET",
url: "http://example.com/",
}).then(function (response) {
var fileContents = response.response;
return file.openAsync(Windows.Storage.FileAccessMode.readWrite).then(function (stream) {
return Windows.Storage.Streams.RandomAccessStream.copyAsync(fileContents.msDetachStream(), stream).then(function () {
return stream.flushAsync().then(function () {
stream.close();
fileContents.msClose();
});
});
});
}); |
WinJS.xhr({
responseType: "blob",
type: "GET",
url: "http://example.com/",
}).then(function (response) {
var fileContents = response.response;
return file.openAsync(Windows.Storage.FileAccessMode.readWrite).then(function (stream) {
return Windows.Storage.Streams.RandomAccessStream.copyAsync(fileContents.msDetachStream(), stream).then(function () {
return stream.flushAsync().then(function () {
stream.close();
fileContents.msClose();
});
});
});
});
I tried to use replaceWithStreamedFileFromUriAsync and writeBufferAsync, but never managed to make it work. If you do, leave a comment!
13 de April de 2013 – 10:44
Atualizei o XCode da versão 4.6.0 para 4.6.01 e de repente meus projetos não construíam mais, dando o erro:
PCH file built from a different branch ((clang-425.0.24)) than the compiler ((clang-425.0.27))
A solução foi simplesmente limpar o projeto. Vá ao menu “Product” e selecione “Clean”.
06 de December de 2012 – 13:52
You can not, from inside a Windows 8 application, snap it.
That doesn’t mean there is no other way 
At work, we have to test our app in a snapped state, so we need a way to programmatically make it happen. We discovered that there are two keyboard shortcuts for this action. Windows Key + . (the period key) snaps to the right edge, and Windows Key + Shift + . snaps to the left edge.
So all we have to do is send these keys to the operating system. Sending the Windows Key is tricky, and not supported using only [System.Windows.Forms.SendKeys]::SendWait.
So here’s an alternative:
Download InputSimulator.dll
Run the following commands on a Powershell prompt:
1
2
| [Reflection.Assembly]::LoadFile("C:\path\to\InputSimulator.dll")
[WindowsInput.InputSimulator]::SimulateModifiedKeyStroke('LWIN', 'OEM_PERIOD') |
[Reflection.Assembly]::LoadFile("C:\path\to\InputSimulator.dll")
[WindowsInput.InputSimulator]::SimulateModifiedKeyStroke('LWIN', 'OEM_PERIOD')
And your app will snap to the right edge. I am still researching how to snap to the left edge, it’s a more complicated call to SimulateModifiedKeyStroke, but will keep researching.
20 de November de 2012 – 12:29
All of sudden, the game Star Wars: The Old Republic is crashing my Nvidia drivers. I have a GeForce GTX 460. Oddly, I played the game for months without any issues, but since the last update, it crashes multiple times.